SQL - 将多个列合并为一列,包含更多行

eat*_*hil 0 sql rows

我有一个包含20列的表,它们都显示相同的内容.我不确定为什么我的公司会这样设置,但我无法对表进行更改.

考虑到这一点,这就是我需要做的事情.我需要用保险公司名称填写下拉列表.因此,我需要在整个表中找到唯一值.

使用Group By子句是不可能的,因为我需要在整个表中使用唯一值.没有单个列包含所有可能的值.我唯一的想法是将表格的所有列组合在一起.我已经看到这使用两个管道(||)完成.但这连接了对我没有帮助的列.

我需要将两个(或二十个)列连接在一起并将它们的行添加到一起.即如果我开始使用20列和100行,我需要有一列2000行.这样我就可以使用Group By子句选择唯一值.

任何帮助将不胜感激!

我想要完成的样本:

样本原始表:

    --Ins1-----Ins2---Ins3---Ins4-
    Medicaid-Medicare-------------
    ---------Medicaid-----No 485--
    Blue Cross--------------------
    -------Home Health----Medicare
Run Code Online (Sandbox Code Playgroud)

表我需要构建:

    --Column1--
    -Medicaid--
    -----------
    Blue Cross-
    -----------
    -Medicare--
    -Medicaid--
    -----------
    Home Health
    -----------
    -----------
    -----------
    -----------
    -----------
    --No 485---
    -----------
    -Medicare--
Run Code Online (Sandbox Code Playgroud)

也许我的逻辑错了.这是我可以看到在整个表格中找到唯一信息的唯一方法.

Tar*_*ryn 5

如果这是SQL Server,那么听起来您需要使用UNPIVOT来执行此转换.

示例UNPIVOT(请参阅SQL小提琴演示):

select ques, answer
FROM t1
unpivot
(
    answer
    for ques in (col1, col2, col3, col4)
) u
Run Code Online (Sandbox Code Playgroud)

UNPIVOT会将您的数据从列转换为行.

  • @phileaton你说你想要独一无二,但你的例子有重复.如果要删除重复项,请使用UNION而不是UNION ALL (2认同)