我怎样才能在……所有……到……成为我订单的第一名呢?由于unions 的原因,我不能在ORDER BY子句中使用CASE.我还认为IF/ELSE是这里的一个复杂因素.

这段代码生活在一个sp中,我最初并没有编写它.我被要求复制它并添加一个空值(原始脚本没有任何空值).

我的解决办法是在

SELECT  
    NULL as parameterValue,
    CAST('--All--' as VARCHAR(50)) AS parameterLabel

现在我需要Null,-All--行始终位于结果的顶部,其余的结果都是parameterValue desc

我想让这个解决方案起作用,但我不知道如何使用IF/Else:

DECLARE 
    @MaxCampaignYear int,
    @rptSection nvarchar(85) = 'Main',
    @showAll bit = 0

    SELECT 
        @MaxCampaignYear = MAX(campaignYearNum) 
    FROM 
        dbo.dimDate
    IF @rptSection = 'Main'
        SELECT
            NULL as parameterValue,
            CAST('--All--' as VARCHAR(50)) AS parameterLabel
        UNION ALL
        SELECT DISTINCT
            campaignYearNum AS parameterValue,
            CAST(campaignYearNum as VARCHAR(50))  AS parameterLabel
        FROM
            dbo.dimDate
        WHERE
            (
            @showAll <> 0
            or campaignYearNum <= @MaxCampaignYear --BI_DW.dbo.udfGetCampaignYear(getdate())
            )
            and campaignYearNum > 0
        ORDER BY
            parameterValue desc
    ELSE
        SELECT
            BI_DW.dbo.udfGetCampaignYear(getdate()) as parameterValue,
            BI_DW.dbo.udfGetCampaignYear(getdate()) as parameterLabel```

推荐答案

您可以在每个联合中添加一个RowNum标识符,然后按RowNum asc、parameterValue desc排序,这样您将始终得到--All--首先,然后是parameterValue desc.

SELECT DISTINCT
            RowNum = 1,
            NULL as parameterValue,
            CAST('--All--' as VARCHAR(50)) AS parameterLabel
        UNION ALL
            RowNum = 2,
            campaignYearNum AS parameterValue,
            CAST(campaignYearNum as VARCHAR(50))  AS parameterLabel
        FROM
            dbo.dimDate
        WHERE
            (
            @showAll <> 0
            or campaignYearNum <= @MaxCampaignYear --BI_DW.dbo.udfGetCampaignYear(getdate())
            )
            and campaignYearNum > 0
        ORDER BY
            RowNum asc, parameterValue desc

Sql相关问答推荐

使用`lag()`获取上一个时间戳

Access 365将文本转换回BigInt

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

关于Postgres横向联接的谓词

重用传递给 node 的参数-postgres upsert查询

在Power Bi中将SQL代码转换为DAX

根据日期 Select ID 的上一条记录

SQL SUM Filter逻辑解释

特殊条件计算小计

获取多个开始-结束时间戳集之间经过的时间

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

将varchar (7)列转换为datetime

使用ALTER TABLE无法删除列

当该日期的至少两条记录具有相同的持续时间或至少一条记录的持续时间为 0 时,如何标记该日期的所有记录

根据是否存在值组合分组并 Select 行

使用 R 遍历 SQL 查询,每次替换一个变量

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列

如何根据 Amazon Athena 中的多个列值删除重复行?

使用分隔符拆分字符串并将它们放在 sql 中的多行中不起作用