我有一个包含数千行的表。我需要检查表中是否存在某些值。
我想列出我正在搜索的所有条形码,如果有的话,返回真或假的标志。
到目前为止,我已经想出了这个:
SELECT CASE WHEN EXISTS (
SELECT *
FROM TABLE
WHERE Coulmn in ('a','b', 'c', 'd', 'e', 'f', 'g')
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
然而,这只返回值1。
所以在表格中我有
coulmn
----------
A
B
D
E
F
G
我想做一个返回以下内容的搜索
Coulmn | Exsists
-----------------
A | True
B | True
C | False
D | True
E | True
F | True
G | True
答案 0 :(得分:0)
这有效:
SELECT *, CASE WHEN (Column in ('1','2')) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END AS result_field
FROM TABLE;
注意:在PostgreSQL中测试
答案 1 :(得分:0)
您可以使用如下查询:
SELECT t1.v,
CASE WHEN t2.col IS NOT NULL THEN 'true' ELSE 'false' END AS Exists
FROM (
SELECT 'a' AS v UNION ALL SELECT 'b' UNION ALL SELECT 'c' UNION ALL SELECT 'd'
UNION ALL SELECT 'e' UNION ALL SELECT 'f' UNION ALL SELECT 'g') AS t1
LEFT JOIN mytable AS t2 ON t1.v = t2.col
答案 2 :(得分:0)
正如它所写的那样,外部选择是选择情况,当存在()然后1,否则0结束......所以它只会返回一行。外部选择必须包括“列”和“存在”(选择列,...)以返回两列。
“where”子句永远不会像这样返回“false”,因为“column”必须位于实际表中,以便查询实际返回它。正如@jarlh所说,你需要一个帮助表来存储你正在寻找的列:
Create table SearchColumns (SearchColumn char(1));
insert into SearchColumns (SearchColumn)
values ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H')
然后,你可以从该表中对表格进行If Exists,以查看哪些值在或不在:
select SearchColumn, case when exists
(select * from TABLE where Table.Column = SearchColumns.SearchColumn)
then 'True' else 'False' end as ExistsStatus
from SearchColumns
我认为这会让你得到你想要的东西。这得到a)每列只有一个记录,无论它在你的表中出现多少次,b)你正在寻找的每个列值都有“真”和“假”。如果你真的想要一个Bit,你可以使用0和1以及原始查询中的转换,但它们实际上显示“0”和“1”; c)无论你拥有多少价值,这都应该有效。
(注意,我假设其中一些是拼写错误,所以我做了调整,但它们是一致的,所以我不确定)。
答案 3 :(得分:0)
通过上面的帮助表单,我创建了一个临时表,然后实现了一个共享的灵魂。
CREATE TABLE #Temp
(
Barcode VARCHAR (100)
)
INSERT INTO #Temp
VALUES
(1),
(2),
(3),
(4 )
select barcode, case when exists
(select * from CIPKORHHTProductDetails where CIPKORHHTProductDetails.Barcode = #temp.barcode)
then 'True' else 'False' end as ExistsStatus
from #temp order by ExistsStatus DESC