首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQL转换输出

从SQL转换输出
EN

Stack Overflow用户
提问于 2016-02-23 17:05:33
回答 1查看 98关注 0票数 1

假设我有一个表Sales

通过这个select,我得到了这个。

代码语言:javascript
复制
SELECT CustID, Date, ArtikelNr FROM Sales

CustID  Date         ArtikelNr
1       23.02.2016   50
1       14.02.2016   40
2       22.02.2016   40
1       24.02.2016   50

现在我想要这样的输出。

代码语言:javascript
复制
CustID  ArtikelNr Date1        Date2       Date3  ... DateN
1       50        23.02.2016   24.02.2016
1       40        14.02.2016
2       50        24.02.2016

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2016-02-23 18:28:45

我认为您的输入数据或示例输出可能存在问题,因为您的最后一个输出行似乎与您的任何输入都不匹配。

我认为你要求的是一个动态的轴心,就像这样:

测试数据

代码语言:javascript
复制
SET DATEFORMAT DMY
CREATE TABLE #Test (CustId INT, Date DATE, ArtikelNr INT)
INSERT INTO #Test VALUES
(1,'23.02.2016',50),
(1,'14.02.2016',40),
(2,'22.02.2016',40),
(1,'24.02.2016',50)

查询

代码语言:javascript
复制
DECLARE @Query AS NVARCHAR(MAX)
DECLARE @Cols AS NVARCHAR(MAX)
SELECT @Cols= ISNULL(@Cols + ',','') + QUOTENAME(RN) FROM (SELECT DISTINCT ROW_NUMBER() OVER (PARTITION BY CustId, ArtikelNr ORDER BY CustId) RN FROM #Test) Z

SET @Query = 
  N'SELECT * FROM 
    (SELECT *, ROW_NUMBER() OVER (PARTITION BY CustId, ArtikelNr ORDER BY CustId) RN FROM #Test) A
    PIVOT ( MIN(DATE) FOR RN IN ('+@Cols+')) PVT
ORDER BY CustId, ArtikelNr DESC'

EXEC sp_executesql @Query

CustId      ArtikelNr   1          2
----------- ----------- ---------- ----------
1           50          2016-02-23 2016-02-24
1           40          2016-02-14 NULL
2           40          2016-02-22 NULL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35573128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档