首页 > 解决方案 > 在 SQL Server SELECT 请求中创建条件

问题描述

我想让你对我的问题有所了解。我正在使用 SQL Server,并且有一个 SELECT 请求。在这个请求中,我想提出一个条件。

这是我的代码:

SELECT
        Workflow.Id                      as Id,
        ...,

        SELECT CAST (
            CASE WHEN @CodeAlgo = 'BQ'
            THEN
                (SELECT MAX(TopConfidentiel) FROM DonneesFinancieresComplementaires WHERE IdWorkflow = Workflow.Id) as TopConfidentiel
            ELSE
                (SELECT MAX(TopConfidentiel) FROM DonneesFinancieres WHERE IdWorkflow = Workflow.Id) as TopConfidentiel
            END)
    FROM Workflow

SQL Server Management Studio 告诉我:

'SELECT' 附近的语法不正确。

我必须以不同的方式写我的条件吗?

我也尝试过这样的事情:

SELECT
        Workflow.Id                      as Id,
        ...,

        IF @CodeAlgo = 'BQ'
            BEGIN
                (SELECT MAX(TopConfidentiel) FROM DonneesFinancieresComplementaires WHERE IdWorkflow = Workflow.Id) as TopConfidentiel
            END
        ELSE
            BEGIN
                (SELECT MAX(TopConfidentiel) FROM DonneesFinancieres WHERE IdWorkflow = Workflow.Id) as TopConfidentiel
            END
    FROM Workflow

但同样的事情。

标签: sqlsql-server

解决方案


您可以这样尝试(如果需要强制转换,您可以在 select 子句中强制转换 TopConfidentiel 字段):

SELECT
    Workflow.Id                      as Id,
    ...,

        CASE 

        WHEN @CodeAlgo = 'BQ'

        THEN
            (SELECT 
              CAST(MAX(TopConfidentiel) AS yourtype) 
             --If CAST is necessary, you can use this for exemple CAST(MAX(TopConfidentiel) AS VARCHAR(10)).
             FROM DonneesFinancieresComplementaires 
             WHERE IdWorkflow = Workflow.Id) 
        ELSE
           (SELECT 
             CAST(MAX(TopConfidentiel) AS yourtype) 
            FROM DonneesFinancieres 
            WHERE IdWorkflow = Workflow.Id) 
        END

        AS TopConfidentiel


FROM Workflow

推荐阅读