Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 如何获取所有级别的值都为250的子\u id_Sql_Sql Server - Fatal编程技术网

Sql 如何获取所有级别的值都为250的子\u id

Sql 如何获取所有级别的值都为250的子\u id,sql,sql-server,Sql,Sql Server,我想要C作为答案。如何获取级别num的所有值均为250的子id?编辑:针对SQL Server进行了更正(感谢一匹没有名字的马) 除了,您必须使用。 第一个查询将为您提供A,B,C,第二个查询将为您提供A,B除外,将仅为您提供C CHILD_NAME LEVEL_NUM A 4 A 5 A 250 ----------------------- B 5 B 250

我想要C作为答案。如何获取级别num的所有值均为250的子id?

编辑:针对
SQL Server
进行了更正(感谢
一匹没有名字的马

除了,您必须使用
。
第一个查询将为您提供
A
B
C
,第二个查询将为您提供
A
B
<代码>除
外,将仅为您提供
C

CHILD_NAME  LEVEL_NUM
    A          4
    A          5
    A          250
-----------------------
    B          5
    B          250
    B          250
------------------------
    C          250
    C          250
    C          250
从表中选择子项名称
除了
从级别为250的表中选择子项名称

您可以将分组与
HAVING
子句一起使用:

select CHILD_NAME from table
except
select CHILD_NAME from table where LEVEL_NUM <> 250
选择子项名称
从mytable
按子对象名称分组
有计数(当等级数为250时,则1结束)=0

如果
LEVEL_NUM
NOT NULL
列,则上述查询有效。

欢迎这样做,在提出问题时请更具体一点:您尝试了什么,您期望什么,等等。查看您使用的是哪种DBMS?为什么是“C”您的答案是什么?C是使用microsoft SQL Server时其所有级别数值均为250的子id现在我们知道它是SQL Server,您需要使用
except
而不是
减号
减号
是Oracle对
except
的非标准关键字)而
distinct
实际上是不必要的
除了
(或
减去
)操作符将自动执行此操作anyway@a_horse_with_no_name谢谢你指点。我认为
减号
ansi
标准。另外,我无法让sql server正常工作,所以请告诉我这看起来是否正常。谢谢。谢谢你的回答,但它不起作用。它给了我那些子ID,它们的一些level_num值不是250。我想要一个所有级别数值都是250的子id,它也给了我A和B。A和B的值中有一个是250,请尝试在
子名称之前使用
distinct
,然后再试一次。我无法测试该查询。@vidhi_shah此查询工作正常。正如Utasv所说,第一个查询将返回所有子_名称,第二个查询将返回至少有一行且级别_NUM不等于250的所有子_名称。在您的情况下,第一个查询结果将是(A,A,A,B,B,C,C),第二个查询结果将是(A,A,B)。使用except只能得到C。如果您只需要第一次和第二次查询的不同结果,请在子项名称前添加不同的关键字
SELECT CHILD_NAME  
FROM mytable
GROUP BY CHILD_NAME  
HAVING COUNT(CASE WHEN LEVEL_NUM <> 250 THEN 1 END) = 0