如何在多个选项之间进行T-SQL选择

时间:2016-01-12 21:59:54

标签: sql-server tsql if-statement

我还不熟悉SQL。我正在编写(实际升级)一个解决邮件的存储过程。

查询如下所示:

SELECT 
    Greeting_ID,
    Client_ID,
    Envelope_Greeting,
    Letter_Greeting     
FROM 
    t_Cust_Greetings  
WHERE
    customer_no = 1234   

生成如下输出:

Greeting_ID Client_ID   Envelope_Greeting   Letter_Greeting
----------------------------------------------------------------
1            1234   Mr. and Mrs. John Smith  Mr. and Mrs. Smith
3            1234   Mr. and Mrs. John Smith  John and Jolene
6            1234   Mr. John Smith           Mr. Smith
7            1234   Mr. and Mrs. John Smith  Jolene and John
8            1234   Mrs. Jolene Smith        Jolene
12           1234   Mrs. Jolene Smith        Mrs. Jolene

并非每个客户都有各种类型的问候语,#1是默认问候语。升级后的过程需要选择#7(如果存在),但如果不存在则选择#3,但如果不是#3则选择默认值。通过合并或案例陈述,我没有成功。

你如何在T-SQL中做这样的事情?

4 个答案:

答案 0 :(得分:1)

你可以尝试这个,但案例应该有效。我没有安装SQL来测试它。

SELECT TOP(1) 
    Greeting_ID,
    Client_ID,
    Envelope_Greeting,
    Letter_Greeting     
FROM 
    t_Cust_Greetings  
WHERE
    Greeting_ID in (7,3,1)
    AND customer_no=1234
ORDER BY
    Greeting_ID DESC

答案 1 :(得分:0)

您的条件行选择#7(如果存在),但如果不存在则选择#3,但如果不存在#3则转为默认值。可以翻译为选择7,3中的任何一个,或1 。您可以在F(A,B,C,D) = A'D' + ABC + BCD' 条件中包含IN运算符,例如

WHERE

因为你在程序块中执行此操作;你也可以使用WHERE Greeting_ID IN (7, 3, 1) 构造。

答案 2 :(得分:0)

理想情况下,您应该将所需的订单存储在单独的表中,然后按顺序排列。但是使用你拥有的东西你可以试试......

SELECT top 1
    Greeting_ID,
    Client_ID,
    Envelope_Greeting,
    Letter_Greeting     
FROM 
    t_Cust_Greetings  
WHERE
    customer_no = 1234
ORDER BY CASE Greeting_ID 
  WHEN 7 THEN 1 
  WHEN 3 THEN 2 
  WHEN 1 THEN 3 
  ELSE 4 
END

答案 3 :(得分:0)

  • 创建一个包含值及其权重/首选顺序的表格。
  • 使用选择前1加入该表,并按顺序获取首选值

您的SQL平台可能不允许使用如下所示的表 - 替换您自己的临时表或表变量或case语句。

select top 1 * 
from t_Cust_Greetings hiYa
join ( values 
        (7,1) 
      , (3,2) 
      , (1,3) 
      ) Prefs (value,weight) 
  on hiYa.Greeting_ID = Prefs.value 
where customer_no = 823165
order by Prefs.weight