我不确定我想问这个问题,所以我会提供我正在寻找的数据和最终结果。
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
答案 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。