简体   繁体   English

根据同一表中的列值从表中选择记录

[英]Select records from a table based on column value from same table

I have already written the following query.我已经编写了以下查询。

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

The above query works well.上面的查询运行良好。 But I would like to have a single query with join and case expression.但我想要一个带有连接和 case 表达式的查询。 Any help would be highly appreciated.任何帮助将不胜感激。

You can use boolean logic:您可以使用布尔逻辑:

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)

To combine this all into one query:要将所有这些合并到一个查询中:

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) ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM