Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择“计数同一列但无空值”_Sql_Sql Server - Fatal编程技术网

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