2017-11-11 41 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并计算该组中的总和。

请在使用之前评估查询的性能和正确性。

相关问题