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
如果添加任何一條記錄也將增加並給出了放置如同
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
在您提出問題後更改問題很粗魯。它可以使答案失效,反過來可以吸引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),讓你的生活更輕鬆?其他人也可以理解這一點。 –