SQL CrossTab查询 - 非数字数据

时间:2014-12-03 19:20:21

标签: sql-server crosstab

我搜索了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的解决方案。

任何人都可以帮我这个吗?提前谢谢!

2 个答案:

答案 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