Sql 选择“计数同一列但无空值”
我有这张桌子: 现在,我试图找到在和匹配时有多少列Sql 选择“计数同一列但无空值”,sql,sql-server,Sql,Sql Server,我有这张桌子: 现在,我试图找到在和匹配时有多少列z不为NULL的结果 table.id=table.z,其中table.z不为空 我试着做下面的事情 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 WH
z
不为NULL的结果
table.id=table.z,其中table.z不为空
我试着做下面的事情
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
试试这个:
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
据我所知,您想知道从
z
列尝试交叉应用
(从中查询)
如果要从结果中删除数量为0的行,
然后将OUTER APPLY
更改为CROSS APPLY
谢谢,这对我帮助很大,如果您愿意,请参阅我的编辑,我的案例中的最终查询是什么样子的。欢迎您提出任何建议。如果您只希望得到z=NULL
的结果,您的编辑工作很好,谢谢您的时间,但我在每一行都得到了不正确的结果3
。此查询将两行一起计数。如果你想看到法比奥的答案,他在查询中应用了OUTER APPLY
。
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
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
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