gpt4 book ai didi

sql-server - 如何压缩查询结果?

转载 作者:行者123 更新时间:2023-12-04 01:44:18 25 4
gpt4 key购买 nike

我有一个包含两列的表格,CODE 和 LINE NUMBER:

201 1
201 2
202 2
203 1
203 3
204
205 1
205 2
205 4

等等等等......

通过我编写的查询,我得到了这个网格:

201 1 2 - -
202 - 2 - -
203 1 - 3 -
204 - - - -
205 1 2 - 4

这是我的查询(sql server):

TRANSFORM sum(numriga)
SELECT codice
FROM tabella
GROUP BY codice
PIVOT numriga In (1,2,3,4,5);

是否可以用 sql 获取而不是这个网格? (删除了空列)

201 1 2 
202 2
203 1 3
204
205 1 2 4

谢谢

最佳答案

您可以先使用 ROW_NUMBER()codice 中获取每个 numriga 的运行编号,然后使用 PIVOT条件聚合:

一个模型表(请下次自己创建)

DECLARE @tbl TABLE(codice INT, numriga INT)
INSERT INTO @tbl VALUES
(201,1)
,(201,2)
,(202,2)
,(203,1)
,(203,3)
,(204,NULL)
,(205,1)
,(205,2)
,(205,4);

需要 CTE 才能为每个 numriga 应用一个流水号

WITH cte AS
(
SELECT *
,ROW_NUMBER() OVER(PARTITION BY t.codice ORDER BY t.numriga) AS numrigaIndex
FROM @tbl t
)
SELECT t.codice
,MAX(CASE WHEN t.numrigaIndex=1 THEN numriga END) AS [1]
,MAX(CASE WHEN t.numrigaIndex=2 THEN numriga END) AS [2]
,MAX(CASE WHEN t.numrigaIndex=3 THEN numriga END) AS [3]
,MAX(CASE WHEN t.numrigaIndex=4 THEN numriga END) AS [4]
FROM cte t
GROUP BY t.codice;

您可以根据需要添加任意多行。

结果

codice  1       2       3       4
------------------------------------
201 1 2 NULL NULL
202 2 NULL NULL NULL
203 1 3 NULL NULL
204 NULL NULL NULL NULL
205 1 2 4 NULL

关于sql-server - 如何压缩查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55950217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com