如何总结的所有列和所有空获得与使用了SQL显示为一个(NA)取代
问题描述:
cid c2id
1 null
1 null
1 null
null 1
null 2
null 3
2 null
3 null
null 4
null 2
输出: -如何总结的所有列和所有空获得与使用了SQL显示为一个(NA)取代
cid c2id
3 NA
NA 6
5 NA
NA 6
如果添加任何一条记录也将增加并给出了放置如同
答
使用两个查询,一个和,另一个数空值,然后结合它们。没有一个命令可以立即执行。
答
这里是你可以尝试
SELECT DISTINCT
ISNULL(CONVERT(VARCHAR, SUM(cid) OVER(PARTITION BY cid)), 'NA') cid,
ISNULL(CONVERT(VARCHAR, SUM(c2id) OVER(PARTITION BY cid)), 'NA') c2id
FROM <table_name>;
结果的一种方法:
cid c2id
3 NA
NA 6
+0
在您提出问题后更改问题很粗鲁。它可以使答案失效,反过来可以吸引downvotes –
答
假设你在表中的顺序有ID作为标识的主键列。
查询:
; WITH CTE AS
(
SELECT *,
CASE WHEN C2id IS NULL
THEN (SELECT top 1 ID FROM cid n WHERE n.c2id IS NOT NULL AND n.ID > CID.ID)
WHEN Cid IS NULL
THEN (SELECT top 1 ID FROM cid n WHERE n.cid IS NOT NULL AND n.ID > CID.ID)
END AS NextID
FROM CID
)
SELECT
CASE WHEN MIN(c2id) IS NULL THEN SUM(cid) ELSE -1 END AS cid,
CASE WHEN MIN(cid) IS NULL THEN SUM(c2id) ELSE -1 END AS c2id
FROM CTE
GROUP BY NextID
ORDER BY CASE WHEN NEXTID IS NULL THEN 1 ELSE 0 END, NextID
样本输出:
cid c2id
3 -1
-1 6
5 -1
-1 6
您可以替换-1,NA。它会计算所需组的下一个ID并计算该组中的总和。
请在使用之前评估查询的性能和正确性。
此查询使用select从tbl组合(聚合(cid)作为varchar(100)),'na'),coalesce(cast(sum(ccid)as varchar(100)),'na')通过cid –
在功能插入任何记录到表中,其中一个也被添加到values.display像上面的输出。 –
性能明智,你将使用for循环做得很好,因为你正在考虑你的sql表格被“排序”......为什么不用一个额外的列与id(前3行id 1,另3行id 2,另外2行id 3,最后2行id 4),让你的生活更轻松?其他人也可以理解这一点。 –