1

どうすれば使えますか

ORDER BY 
CASE @AccountOperator
WHEN '>' THEN AccountTrxValue 
END ASC,
CASE @AccountOperator
WHEN '<' THEN AccountTrxValue 
END DESC

AccountTrxValueがエイリアスであり、「選択」で次の結果が得られた場合はどうなりますか?

CASE WHEN PAA.RedeemValue>0 THEN
    PAA.RedeemValue * -1 
    ELSE PAA.EarnValue END
    AS AccountTrxValue ,

ケースのためにエイリアスを受け入れません

(サブクエリを使用せずに)

編集:

誰かが私に答えて、私はそれをそのようにした:

ORDER BY 
    CASE 
    WHEN @AccountOperator IS NULL OR @AccountOperator IN ('>','=') THEN
        CASE WHEN PAA.RedeemValue>0 THEN
        PAA.RedeemValue * -1 
        ELSE PAA.EarnValue  END 
    END DESC,  
CASE 
    WHEN @AccountOperator = '<'THEN
        CASE WHEN PAA.RedeemValue>0 THEN
        PAA.RedeemValue * -1 
        ELSE PAA.EarnValue  END 
    END   

どうすればもっと短い方法で書くことができますか?*「in」にnullを含めることができませんでした*「end」の後に「desc」を書き込む必要があるようであるため、2つのケースを実行する必要がありました

4

1 に答える 1

2
ORDER BY 
    CASE @AccountOperator
        WHEN '>' THEN AccountTrxValue 
        WHEN '<' THEN -AccountTrxValue
    END

SQL Serverを想定して、ORDERBY句で列エイリアスを使用できるようにする必要があります

さもないと:

ORDER BY 
    CASE @AccountOperator
        WHEN '>' THEN
        CASE WHEN PAA.RedeemValue>0 THEN
        PAA.RedeemValue * -1 
        ELSE PAA.EarnValue END
    WHEN '<' THEN
        -CASE WHEN PAA.RedeemValue>0 THEN
        PAA.RedeemValue * -1 
        ELSE PAA.EarnValue END
END

編集:

-AccountTrxValueまたは-CASEWHENPAA.RedeemValue>0...は単に値を否定します。これは、デフォルトのASCがDESCのように機能することを意味します...

Edit2:非数値の一般的なケース

DECLARE @Switch char(1);
SELECT @Switch = '<';

SELECT
    *,
    ROW_NUMBER() OVER (ORDER BY SortCol ASC) AS SortASC,
    ROW_NUMBER() OVER (ORDER BY SortCol DESC) AS SortDESC
FROM
    dbo.tablename
ORDER BY 
    CASE @Switch
        WHEN '<' THEN ROW_NUMBER() OVER (ORDER BY SortCol ASC)
        WHEN '>' THEN ROW_NUMBER() OVER (ORDER BY SortCol DESC)
        ELSE 0
    END;
于 2009-03-25T07:03:41.493 に答える