将一些行转换为列

时间:2015-02-20 20:10:08

标签: sql sql-server

我不确定我想问这个问题,所以我会提供我正在寻找的数据和最终结果。

Q Number | M Number | Date   | Type    | Result
------------------------------------------------
Q-0005   | M-00099  | 2/2/15 | Pal     | 1
Q-0005   | M-00099  | 2/2/15 | Pal     | 2
Q-0007   | M-00095  | 2/2/15 | Pal     | 1
Q-0007   | M-00095  | 2/1/15 | Pal     | 3
Q-0005   | M-00099  | 2/1/15 | CompID  | 25AD
Q-0007   | M-00095  | 2/2/15 | CompID  | 15AD
Q-0005   | M-00099  | 2/1/15 | CompLO  | ZYZ23
Q-0007   | M-00095  | 2/2/15 | CompLO  | ZYZ23

这是SQL Server中数据的存储方式。

但是,我希望能够按Type进行排序,并且他们会得到结果。所以,如果我想找到Q-Number Pal = 1 and CompID = 25AD and CompLO = ZYZ23,我似乎无法找到一种方法来转动Type列,如果可能的话。

Q Number | M Number | Date   | PAL  | CompID | CompLO
------------------------------------------------------
Q-0005   | M-00099  | 2/2/15 | 1    | 25AD   | ZYZ23
Q-0005   | M-00099  | 2/2/15 | 2    | 25AD   | ZYZ23
Q-0005   | M-00099  | 2/2/15 | 3    | 25AD   | ZYZ23
Q-0007   | M-00095  | 2/1/15 | 3    | 15AD   | ZYZ23

任何帮助都将不胜感激。

-Kevin

1 个答案:

答案 0 :(得分:1)

以下是如何转动数据的示例...我的输出与您在示例中指定的内容不匹配,但我认为您在“日期”列中输入了一些错误,导致某些列不正确分组。

如果您的示例数据集中没有拼写错误,请告诉我您如何计算所提供的输出,我会更新我的答案。

------------------------------------
-- Mock up the table and data...
------------------------------------
create table #Table
(
    QNumber CHAR(6),
    MNumber CHAR(7),
    Date    DATE,
    Type    VARCHAR(20),
    Result  VARCHAR(20)
);
go

insert into #Table(QNumber, MNumber, Date, Type, Result)
values      ('Q-0005', 'M-00099', '2/2/15', 'Pal', '1'),
            ('Q-0005', 'M-00099', '2/2/15', 'Pal', '2'),
            ('Q-0007', 'M-00095', '2/2/15', 'Pal', '1'),
            ('Q-0007', 'M-00095', '2/1/15', 'Pal', '3'),
            ('Q-0005', 'M-00099', '2/1/15', 'CompID', '25AD'),
            ('Q-0007', 'M-00095', '2/2/15', 'CompID', '15AD'),
            ('Q-0005', 'M-00099', '2/1/15', 'CompLO', 'ZYZ23'),
            ('Q-0007', 'M-00095', '2/2/15', 'CompLO', 'ZYZ23');
go
------------------------------------

select      QNumber,
            MNumber,
            Date,
            PAL     =   MAX(case
                                when Type = 'PAL' then Result
                            end),
            CompID  =   MAX(case
                            when Type = 'CompID' then Result
                        end),
            CompLO  =   MAX(case
                            when Type = 'CompLO' then Result
                        end)
from        #Table
group by    QNumber, MNumber, Date;

以下是一个示例:sqlfiddle