我的数据结构如下:
Call_Num Country Item_Num Date
XXX1 GG 1 26-Dec
XXX1 GG 2
YYY1 FF 1 2-Jan
ZZZ1 HH 1
ZZZ1 HH 2
YYY1 II 1 3-Jan
YYY1 II 2 3-Jan
我的目标是获得一个DISTINCT计数为Call_Num的汇总表,如下所示:
Country Calls_with_date Calls_with_partial_date Calls_with_no_date
GG 0 1 0
FF 1 0 0
HH 0 0 1
II 1 0 0
如何使用查询在SQL Server中完成此操作。我可以在日期字段的所有实例中得到它而没有足够简单的日期。但是,对于我来说,将这种分组也变得有点困难。
假设:
a)每个国家/地区将有超过1个call-num。为简单起见,我提到了一个简单的例子。
b)我知道在汇总到上面给出的新表时,我们可能需要每列使用一个查询。所以上面的答案可能是三个查询,其中有类似的逻辑。
c)没有日期,我的意思是所有出现的call_num都没有指定日期。部分地,我的意思是指定一个或多个日期。
d)我在摘要中只计算一个呼叫,即使表中有多个呼叫,因为每个呼叫可以有多个项目,并且每个项目都可以有一个日期。我关注整个call_num,因此摘要中的分割。
提前感谢您的时间和帮助。
答案 0 :(得分:0)
以下是我将如何做的伪代码:
SELECT
SUM(
CASE
WHEN Date IS NOT NULL AND NOT EXISTS(SELECT * FROM MyTable WHERE {SameCountry, SameCallNum} AND Date IS NULL OR (Date IS NOT NULL AND {Item_Num is lower than this one}))
THEN 1
ELSE 0
END
) AS Calls_with_date
, SUM(
CASE
WHEN Date IS NOT NULL AND EXISTS(SELECT * FROM MyTable WHERE {SameCountry, SameCallNum} AND Date IS NULL)
AND NOT EXISTS (SELECT * MyTable WHERE {SameCountry, SameCallNum} AND Date IS NOT NULL AND {Item_Num is lower than this one})
THEN 1
ELSE 0
END
) AS Calls_with_partial_date
, SUM(
CASE
WHEN Date IS NULL AND NOT EXISTS(SELECT * FROM MyTable WHERE {SameCountry, SameCallNum} AND Date IS NOT NULL OR (Date IS NULL AND {Item_Num is lower than this one}))
THEN 1
ELSE 0
END
) AS Calls_with_no_date
FROM MyTable
GROUP BY Country