简体   繁体   English

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

[英]Select count same column but no NULL values

I have got this table: 我有这张桌子:

 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 

Now I'm trying to achieve to find how many results having column z not NULL at SUM match 现在,我试图实现找出在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 

I tried to do following 我试图做以下

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

But got this exception: 但是有这个例外:

Each GROUP BY expression must contain at least one column that is not an outer reference. 每个GROUP BY表达式必须包含至少一个不是外部引用的列。

Can you guys please help me to achieve that result? 你们能帮我实现这个目标吗?

Thanks in advance and thanks for your time. 在此先感谢您的宝贵时间。

EDIT: This query according to Fabio answer gives me desired result: 编辑:根据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

As I understand you want to know how much same ID found from z column 据我了解,您想知道从z列中找到了多少相同的ID
Try CROSS APPLY (query from SQL Fiddle sample ) 尝试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

If you want remove rows with Quantity = 0 from result, 如果要从结果中删除“ Quantity = 0行,
then change OUTER APPLY to CROSS APPLY 然后将OUTER APPLY更改为CROSS APPLY

Try this: 尝试这个:

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