Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何使用ID'筛选我的选择;不是所有的栏都有_Sql_Sql Server - Fatal编程技术网

Sql 如何使用ID'筛选我的选择;不是所有的栏都有

Sql 如何使用ID'筛选我的选择;不是所有的栏都有,sql,sql-server,Sql,Sql Server,设想一个表,其中所有列都是特定位置(位置)项的ID 如你所见,第3项不在本表中,是“缺失” 我当然有一张摆满所有物品的桌子 Select * from Items Item1 Item2 Item3 Item4 Item5 如何进行查询以返回缺少项目3 我尝试过的 我试图取消打印我的位置表,然后选择itemId不在(??)中的项目 但我不知道如何使它工作,我不想使用UNPIVOT 感谢您的帮助您可以通过列出缺少的项目并使用不存在返回这些项目: select v.item as missing

设想一个表,其中所有列都是特定位置(位置)项的ID

如你所见,第3项不在本表中,是“缺失”

我当然有一张摆满所有物品的桌子

Select * from Items

Item1
Item2
Item3
Item4
Item5
如何进行查询以返回缺少项目3

我尝试过的

我试图取消打印我的位置表,然后选择itemId不在(??)中的项目

但我不知道如何使它工作,我不想使用UNPIVOT


感谢您的帮助

您可以通过列出缺少的项目并使用
不存在
返回这些项目:

select v.item as missing_item
from (values ('item 3')) v(item)
where not exists (select 1
                  from t
                  where v.item in (pos1, pos2, pos3, pos4, pos5, pos6, pos7)
                 ) ;
如果要查找所有缺少的项目,请执行以下操作:

select i.item as missing_item
from items i
where not exists (select 1
                  from t
                  where i.item in (pos1, pos2, pos3, pos4, pos5, pos6, pos7
                 ) ;

您可以通过列出缺少的项目并使用
不存在
,返回缺少的项目:

select v.item as missing_item
from (values ('item 3')) v(item)
where not exists (select 1
                  from t
                  where v.item in (pos1, pos2, pos3, pos4, pos5, pos6, pos7)
                 ) ;
如果要查找所有缺少的项目,请执行以下操作:

select i.item as missing_item
from items i
where not exists (select 1
                  from t
                  where i.item in (pos1, pos2, pos3, pos4, pos5, pos6, pos7
                 ) ;

可以先将列传输到行

    SELECT * FROM (
       SELECT 1 AS lineID,NULL AS Pos1 , 'item1' AS   Pos2 , 'item2'  AS  Pos3 , NULL   Pos4,  'item3' AS   Pos5 , 'item5' AS  Pos6 , 'item10' AS   Pos7  
     ) AS t
       CROSS APPLY (VALUES('Pos1',t.Pos1),('Pos1',t.Pos2),('Pos1',t.Pos3),('Pos1',t.Pos4),('Pos1',t.Pos5),('Pos1',t.Pos6),('Pos1',t.Pos7)) AS c (colName,ColValue)
    WHERE c.ColValue='item3'
SQL2:


可以先将列传输到行

    SELECT * FROM (
       SELECT 1 AS lineID,NULL AS Pos1 , 'item1' AS   Pos2 , 'item2'  AS  Pos3 , NULL   Pos4,  'item3' AS   Pos5 , 'item5' AS  Pos6 , 'item10' AS   Pos7  
     ) AS t
       CROSS APPLY (VALUES('Pos1',t.Pos1),('Pos1',t.Pos2),('Pos1',t.Pos3),('Pos1',t.Pos4),('Pos1',t.Pos5),('Pos1',t.Pos6),('Pos1',t.Pos7)) AS c (colName,ColValue)
    WHERE c.ColValue='item3'
SQL2:


为什么不想使用UNPIVOT?然后使用
VALUES
表构造,而不是
UNPIVOT
;无论如何,我个人更喜欢这种方法。另外,向我们展示您尝试过的代码,不要只告诉我们您“尝试过”。为什么不使用UNPIVOT?然后使用
表构造,而不是
UNPIVOT
;无论如何,我个人更喜欢这种方法。另外,向我们展示你尝试过的代码,不要只是告诉我们你“尝试过”。你需要为
不退出添加额外的
。我想我需要为
中的
添加额外的参数。干杯。您需要为非退出添加额外的
。我想我需要为
中的
添加额外的参数。干杯