繁体   English   中英

选择计数同一列但没有NULL值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM