我搜索了SQL交叉表信息和示例,但几乎所有这些都是基于数字数据进行CROSSTABS / PIVOTS而我的数据不是数字。我正在使用MS SQL Server
我在一个表中有以下数据:
DEVICE DATATYPE DATA
------ -------- ----
ABC RELEASE-DATE 10/01/2013
ABC VERSION 01A
ABC BUILD-DATE 11/03/2014
ABC TYPE PROD
DEF RELEASE-DATE 06/19/2014
DEF VERSION 02G
DEF BUILD-DATE 08/07/2014
GHI RELEASE-DATE 12/11/2013
GHI VERSION 01F
GHI BUILD-DATE 01/03/2014
GHI TYPE DEV
JKL RELEASE-DATE 10/01/2013
JKL VERSION 01A
JKL BUILD-DATE 06/25/2014
JKL TYPE PROD
我想要的输出如下所示:
DEVICE RELEASE-DATE VERSION BUILD-DATE TYPE
------ ------------ ------- ---------- ----
ABC 10/01/2013 01A 11/03/2014 PROD
DEF 06/19/2014 02G 08/07/2014
GHI 12/11/2013 01F 01/03/2014 DEV
JKL 10/01/2013 01A 06/25/2014 PROD
我一直在使用VLOOKUPS在Excel中手动完成这项工作,但是如果可能的话,我希望有一个使用SQL的解决方案。
任何人都可以帮我这个吗?提前谢谢!
答案 0 :(得分:1)
使用MAX
(或MIN
)表示非数字数据:
SELECT *
FROM MyTable
PIVOT (MAX(Data)
FOR DataType IN ([RELEASE-DATE], [Version], [BUILD-DATE], [TYPE])) pvt
答案 1 :(得分:1)
使用pivot
,将行转换为列。
SELECT DEVICE, [RELEASE-DATE],[VERSION],[BUILD-DATE],[TYPE] FROM Table1
PIVOT
( max(DATA) for DATATYPE in ( [RELEASE-DATE],[VERSION],[BUILD-DATE],[TYPE])
)pvt