多个条件列的SQL查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个条件列的SQL查询相关的知识,希望对你有一定的参考价值。
对于标题的原谅我似乎无法弄清楚我能做些什么。我有一个MainTable
有一些列在另一个表DefTable
中定义
简化,因为这些列从Col1
运行到Col99
可维护性
RowId Col1 Col2 Col3 Col4
----- ---- ---- ---- ----
1 Y N N N
2 N Y N N
3 N N N Y
DefTable
Key Description
--- -----------
1 Logistics
2 Warehouse
3 Packaging
4 MainLobby
条件是:
如果列标记为Y
我应该根据Description
中的键显示DefTable
此外,我正在研究两个或更多列的可能性被勾选Y
。如果发生这种情况我应该Concatenate
像Logistics, MainLobby
的结果
预期产出
RowId Description
----- -----------
1 Logistics
2 Warehouse
3 MainLobby
多个勾选列的可能性
RowId Description
----- -----------
1 Warehouse, MainLobby
我一直在修补这个answer,但我仍然卡住了。请帮我。
答案
我猜这就是你要找的东西。
您的数据看起来像:
可维护性
SELECT * INTO #MainTable FROM (
VALUES(1,'Y','N','N','N'),
(2,'N','Y','N','N'),
(3,'N','N','N','Y')
) AS A(RowId ,Col1 ,Col2 ,Col3 ,Col4)
DefTable
SELECT * INTO #DefTable FROM (
VALUES(1,'Logistics'),
(2,'Warehouse'),
(3,'Packaging'),
(4,'MainLobby')
)AS A([Key],[Description])
查询:
SELECT M.RowId ,
CASE WHEN (Col1='Y' OR Col2='Y' OR Col3='Y' OR Col4='Y' )THEN D.Description ELSE '' END AS [Description]
FROM #MainTable M
INNER JOIN #DefTable D ON D.[Key]=M.RowId
动态方法:
DECLARE @QUERY NVARCHAR(MAX),@COLUMNSQUERY NVARCHAR(MAX)
SET @COLUMNSQUERY=(SELECT 'CASE '+(SELECT 'WHEN '+COLUMN_NAME +'=''Y'' THEN [DESCRIPTION] '
FROM [tempdb].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME like '#MainTable%'
and COLUMN_NAME <>'RowId' for xml path('') ) + 'ELSE '''' END AS [DESCRIPTION]' )
SET @QUERY=' SELECT M.RowId ,'+@COLUMNSQUERY + 'FROM #MainTable M
INNER JOIN #DefTable D ON D.[Key]=M.RowId'
EXEC (@QUERY)
注意:我从Temp db中选择了临时表的列。请将其替换为主表所在的实际数据库
用这个FROM [tempdb].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME like '#MainTable%'
替换这个条件FROM [YourDatabaseName].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME like 'Your Main table Name%'
另一答案
你会使用Apply
运算符(即CROSS APPLY
)
SELECT a.RowId, d.Description
FROM MainTable t
CROSS APPLY (
VALUES (t.RowId, 1, t.Col1), (t.RowId, 2, t.Col2),
(t.RowId, 3, t.Col3), (t.RowId, 4, t.Col4)
....
)a(RowId, Id, Cols)
INNER JOIN DefTable d ON d.[Key] = a.Id
WHERE a.Cols = 'Y'
以上是关于多个条件列的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章