Select 来自 table 的记录基于同一 table 的列值
Select records from a table based on column value from same table
我已经编写了以下查询。
DECLARE @LEVEL NVARCHAR(10),
@ID INT = 12
SELECT @LEVEL = RTRIM(LEVEL_NEW)
FROM HIER
WHERE ID = @ID
IF (@LEVEL = 'LEVEL 1')
SELECT *
FROM HIER
WHERE FC_LEVEL1 = @ID
ELSE IF (@LEVEL = 'LEVEL 2')
SELECT *
FROM HIER
WHERE FC_LEVEL2 = @ID
ELSE IF (@LEVEL = 'LEVEL 3')
SELECT *
FROM HIER
WHERE FC_LEVEL3 = @ID
以上查询效果很好。但我想要一个带有连接和案例表达式的查询。任何帮助将不胜感激。
您可以使用布尔逻辑:
select *
from hier
where (@level = 'LEVEL 1' and fc_level1 = @id)
or (@level = 'LEVEL 2' and fc_level2 = @id)
or (@level = 'LEVEL 3' and fc_level3 = @id)
要将所有这些合并为一个查询:
SELECT h.*
FROM HIER h CROSS JOIN
(SELECT RTRIM(LEVEL_NEW) as LEVEL
FROM HIER
WHERE ID = @ID
) l
WHERE (L.LEVEL = 'LEVEL 1' AND h.FC_LEVEL1 = @ID) OR
(L.LEVEL = 'LEVEL 2' AND h.FC_LEVEL2 = @ID) OR
(L.LEVEL = 'LEVEL 3' AND h.FC_LEVEL3 = @ID) ;
我已经编写了以下查询。
DECLARE @LEVEL NVARCHAR(10), @ID INT = 12 SELECT @LEVEL = RTRIM(LEVEL_NEW) FROM HIER WHERE ID = @ID IF (@LEVEL = 'LEVEL 1') SELECT * FROM HIER WHERE FC_LEVEL1 = @ID ELSE IF (@LEVEL = 'LEVEL 2') SELECT * FROM HIER WHERE FC_LEVEL2 = @ID ELSE IF (@LEVEL = 'LEVEL 3') SELECT * FROM HIER WHERE FC_LEVEL3 = @ID
以上查询效果很好。但我想要一个带有连接和案例表达式的查询。任何帮助将不胜感激。
您可以使用布尔逻辑:
select *
from hier
where (@level = 'LEVEL 1' and fc_level1 = @id)
or (@level = 'LEVEL 2' and fc_level2 = @id)
or (@level = 'LEVEL 3' and fc_level3 = @id)
要将所有这些合并为一个查询:
SELECT h.*
FROM HIER h CROSS JOIN
(SELECT RTRIM(LEVEL_NEW) as LEVEL
FROM HIER
WHERE ID = @ID
) l
WHERE (L.LEVEL = 'LEVEL 1' AND h.FC_LEVEL1 = @ID) OR
(L.LEVEL = 'LEVEL 2' AND h.FC_LEVEL2 = @ID) OR
(L.LEVEL = 'LEVEL 3' AND h.FC_LEVEL3 = @ID) ;