簡體   English   中英

SQL:我們能夠將多個條件組合到一個結果列中嗎?

[英]SQL: Are we able to combine multiple conditions into one result column?

我正在將一些舊數據從一個丑陋的DB堆標准化並遷移到更有用的東西中。

順便說一句,源數據庫是MSSQL / SQL-Server。
(並且它受到列和表蔓延的困擾,很少使用FK,並且有FK的地方,它們經常被破壞,因為某些UI用例中的某些唯一ID的變化 !!! :)

現在,我正在收集一些客戶數據。 這里有兩類主要客戶。 它們不是相互排斥的。 使用的術語相當神秘,所以我將這里簡化為UserReseller

就目前而言,源表中有4個(是, 4個 )列,可用於確定客戶是經銷商還是用戶is_userisuseris_resellercust_type
cust_type列存儲手工類型的值,因此我們也面臨拼寫/縮寫的變化:)

我已經有一些早期的查詢分別選擇每個客戶類型,但現在我想將它們合並到一個qry中,結果有一個簡單的is_user bool和一個簡單的is_reseller bool。

這是我的用戶 qry的一個示例(為簡潔而修剪,功能完整):

SELECT TOP 1 name, email, phone
FROM customer 
WHERE  name = '{$row['cust']}'
AND (  isuser=1 
    OR is_user=1
    OR cust_type LIKE 'USER%'
    OR cust_type = 'DIRECT USER' 
)


我的目標是消除該條件,並將其替換為結果集中的附加列,以指示is_user是否為TRUE / FALSE。

這在SQL中是否可行(特別是MS風格)?

您可以使用CASE表達式,但是您需要確保WHERE子句不那么獨占(如果它是相同的一組條件,那么結果中的每一行都將為真)。

SELECT TOP 1 name, email, phone, is_user = CASE
   WHEN ( isuser = 1 
      OR is_user = 1
      OR cust_type LIKE 'USER%'
      OR cust_type = 'DIRECT USER')
   THEN 1 ELSE 0 END,
 is_reseller = CASE 
   WHEN (...any condition that makes a customer a reseller...)
   THEN 1 ELSE 0 END
FROM dbo.customer
...WHERE...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM