2017-11-11 66 views

回答

0

使用兩個查詢,一個和,另一個數空值,然後結合它們。沒有一個命令可以立即執行。

+0

此查詢使用select從tbl組合(聚合(cid)作爲varchar(100)),'na'),coalesce(cast(sum(ccid)as varchar(100)),'na')通過cid –

+0

在功能插入任何記錄到表中,其中一個也被添加到values.display像上面的輸出。 –

+0

性能明智,你將使用for循環做得很好,因爲你正在考慮你的sql表格被「排序」......爲什麼不用一個額外的列與id(前3行id 1,另3行id 2,另外2行id 3,最後2行id 4),讓你的生活更輕鬆?其他人也可以理解這一點。 –

0

這裏是你可以嘗試

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 –

0

假設你在表中的順序有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並計算該組中的總和。

請在使用之前評估查詢的性能和正確性。

相關問題