[英]Select count same column but no NULL values
我有这张桌子:
id akce text xyza year 61 FF1231-00 Bob NULL NULL 58 NULL 2014 62 FF1231-00 Alice NULL NULL 57 NULL 2014 57 FF1231-00 1/2 SWC 2 20 NULL NULL 2014 58 FF1231-00 1/3 SWC 3 5 NULL NULL 2014 59 FF1231-00 Jim NULL NULL 57 NULL 2014
现在,我试图实现找出在SUM匹配中具有z
列不为NULL的结果的数量
table.id = table.z WHERE table.z is NOT NULL
id akce text xyza year 57 FF1231-00 1/2 SWC 2 20 NULL 2 2014 58 FF1231-00 1/3 SWC 3 5 NULL 1 2014
我试图做以下
SELECT T1.id, T1.text, T1.z, T1.akce, T2.[text], (SELECT COUNT(T1.z) where T1.z IS NOT NULL Group by T1.z)
FROM ubytov T1
LEFT OUTER JOIN ubytov T2
ON T1.z = T2.id
WHERE T1.akce='FF1231-00' AND T1.z IS NULL
但是有这个例外:
每个GROUP BY表达式必须包含至少一个不是外部引用的列。
你们能帮我实现这个目标吗?
在此先感谢您的宝贵时间。
编辑:根据Fabio答案此查询给了我想要的结果:
SELECT t.id
, t.akce
, t.text
, t.x
, t.y
, t.z
, qnt.Quantity
FROM ubytov t
OUTER APPLY (SELECT COUNT(q.z) AS Quantity FROM Ubytov
q WHERE q.z = t.id) qnt WHERE t.z is NULL
据我了解,您想知道从z
列中找到了多少相同的ID
尝试CROSS APPLY
(来自SQL Fiddle示例的查询)
SELECT t.ID
, t.Akce
, t.x
, t.y
, t.z
, qnt.Quantity
FROM Test t
OUTER APPLY (SELECT COUNT(q.ID) AS Quantity FROM Test q WHERE q.z = t.ID) qnt
如果要从结果中删除“ Quantity = 0
行,
然后将OUTER APPLY
更改为CROSS APPLY
尝试这个:
SELECT T1.id, T1.text, T1.z, T1.akce, T2.[text],
(SELECT COUNT(T3.z) FROM ubytov T3 where T3.z IS NOT NULL)
FROM ubytov T1
LEFT OUTER JOIN ubytov T2
ON T1.z = T2.id
WHERE T1.akce='FF1231-00' AND T1.z IS NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.