【问题标题】:Calculate column and include IF statement based on calculated column计算列并根据计算列包含 IF 语句
【发布时间】:2018-07-01 02:16:34
【问题描述】:

我尝试编写的查询有问题。 该查询应该给我客户编号,该客户的总收入,并基于收入另一个值(即“金”、“银”或“铜”)。 我有一个查询,可以为我提供每个客户的总收入:

CREATE PROCEDURE sp_klantOverzicht 
DECLARE @beginDatum DATETIME
DECLARE @eindDatum DATETIME
--AS
SET @beginDatum = '2013-01-01 00:00:00.000';
SET @eindDatum = '2017-01-01 00:00:00.000';
SELECT KLANT_NR, SUM(PRIJS) AS OMZET
FROM (
    SELECT kl.KLANT_NR, SUM(DATEDIFF(d, h.STARTDATUM, h.EINDDATUM)*a.PRIJS_PER_D) AS PRIJS
    FROM HUUROVEREENKOMST AS h
    LEFT JOIN ARTIKEL AS a
    ON h.BARCODE = a.BARCODE
    LEFT JOIN KLANT AS kl 
    ON kl.KLANT_NR = h.KLANT_NR
    WHERE DATEPART(year, h.STARTDATUM) BETWEEN DATEPART(year, @beginDatum) 
    AND DATEPART(year, @eindDatum)
    GROUP BY kl.KLANT_NR
    UNION
    SELECT kl.KLANT_NR, SUM(a.PRIJS) AS PRIJS
    FROM ARTIKEL AS a
    LEFT JOIN KOOPOVEREENKOMST AS k
    ON k.BARCODE = a.BARCODE
    LEFT JOIN KLANT AS kl 
    ON kl.KLANT_NR = k.KLANT_NR
    WHERE DATEPART(year, k.DATUM) BETWEEN DATEPART(year, @beginDatum) 
    AND DATEPART(year, @eindDatum)
    GROUP BY kl.KLANT_NR
) AS overzicht
GROUP BY KLANT_NR
ORDER BY OMZET DESC

它会给我这样的结果:

现在,我需要检查“OMZET”列中的值是否高于 50、100 或 150,然后在第三列中添加“Bronze”、“Silver”或“Gold”。

我尝试通过SELECT 语句中的子查询来实现这一点,并创建了一个函数来计算第三列。但是没有结果。 谁能帮我找到正确的解决方案?

所有帮助将不胜感激!

【问题讨论】:

  • 请尽可能使用文字代替图片。
  • @MichaWiedenmann Wiedenman 在这种情况下会有什么附加价值?
  • 我更喜欢文字,也许我错了。人们似乎也更喜欢文字:meta.stackoverflow.com/questions/285551/…

标签: sql sql-server tsql


【解决方案1】:

使用 CASE ... WHEN 语句

SELECT KLANT_NR, SUM(PRIJS) AS OMZET,
    CASE WHEN SUM(PRIJS) >= 150 THEN 'GOLD'
         WHEN SUM(PRIJS) >= 100 THEN 'SILVER'
         WHEN SUM(PRIJS) >=  50 THEN 'BRONZE'
         END
FROM ( ....

像上面一样将它作为选择元素之一添加到您的查询中

【讨论】:

  • 我必须在哪里添加这个,因为我已经尝试过这样的事情
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多