需要子查询条件输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要子查询条件输出相关的知识,希望对你有一定的参考价值。

我正在使用一组使用以下查询的车辆数据:

SELECT 
    VIN_NUM AS [Registration VIN]
    ,REGION_IND AS [Location of Registration]
    ,REG_CHANGE AS [Changed Location Since Last Check]
    ,CASE 
        WHEN REG_CHANGE = '' THEN REGION_IND 
        ELSE REG_CHANGE 
    END AS [Final Location]
FROM
    dbo.All_Tests
WHERE
VIN_NUM LIKE '1FM%' AND
CASE 
    WHEN REGION_IND = '1' THEN 'Upstate'
    WHEN REGION_IND = '2' THEN 'Downstate'
    ELSE 'Unknown' 
END = 'Downstate'

该查询从表中提取车辆VIN(VIN_NUM)以及它是否位于两个区域(REGION_IND),“1”或“2”之一中。它还会拉一列“REG_CHANGE”,检查自上次报告以来车辆登记是否改变了两个地区之间的位置。这三个都来自同一张桌子。

如果没有更改,则REG_CHANGE为空(不为NULL),如果有更改,则包含新的区域位置“1”或“2”。这在带有REGION_IND的CASE语句中用于为数据库中的所有车辆提供当前位置,别名为[最终位置]。

如果我想要原始区域,则代码有效,因为REGION_IND是一个表列。但是,我不能使用[Final Location],因为WHERE语句不允许使用别名。我认为这将是SELECT列中的子查询构造,但我不确定它是如何构造的。

有没有人有什么建议?

答案

一个有用的方法是在applyclause中使用fromoperator,然后允许在where子句中使用该列别名:

SELECT
    VIN_NUM    AS [registration vin]
  , REGION_IND AS [location of registration]
  , REG_CHANGE AS [changed location since last check]
  , ca.[final location]
FROM dbo.All_Tests
CROSS APPLY (
    SELECT
        CASE
            WHEN REG_CHANGE = '' THEN REGION_IND
            ELSE REG_CHANGE
        END AS [final location]
    ) ca
WHERE VIN_NUM LIKE '1FM%'
AND ca.[final location] = 'Downstate'

以下àpply的任何进一步使用也可以使用这些列别名。

顺便说一句:虽然SQL select查询以select子句开头,但该子句在from和where子句之后执行。因此,在from子句中定义列别名使得该别名在查询执行的早期可用。

另一答案

你可以写下你的地方

   SELECT 
            VIN_NUM AS [Registration VIN]
            ,REGION_IND AS [Location of Registration]
            ,REG_CHANGE AS [Changed Location Since Last Check]
            ,CASE 
                WHEN REG_CHANGE = '' THEN REGION_IND 
                ELSE REG_CHANGE 
            END AS [Final Location]
        FROM
            dbo.All_Tests
        WHERE
        VIN_NUM LIKE '1FM%' AND
        (
            (REGION_IND = '1' and REG_CHANGE ='Upstate') OR
            (REGION_IND = '2' and REG_CHANGE ='Downstate') OR                
            (REG_CHANGE = 'Downstate')
       )

以上是关于需要子查询条件输出的主要内容,如果未能解决你的问题,请参考以下文章

需要子查询帮助

在 UNION 查询中执行 DISTRIBUTE BY 时是不是需要子查询?

Django 查询集过滤器(可能需要子查询)

以不同方式统计客户 - 我需要子查询吗?

oracle分页查询,一个select语句解决,不需要子查询。

SubSelectionRequired 类型的验证错误:字段时间戳类型需要子选择