![](/img/trans.png)
[英]SQL DISTINCT on multiple columns except one, combine last column in result
[英]SQL: Are we able to combine multiple conditions into one result column?
我正在將一些舊數據從一個丑陋的DB堆標准化並遷移到更有用的東西中。
順便說一句,源數據庫是MSSQL / SQL-Server。
(並且它受到列和表蔓延的困擾,很少使用FK,並且有FK的地方,它們經常被破壞,因為某些UI用例中的某些唯一ID的變化 !!! :)
現在,我正在收集一些客戶數據。 這里有兩類主要客戶。 它們不是相互排斥的。 使用的術語相當神秘,所以我將這里簡化為User和Reseller 。
就目前而言,源表中有4個(是, 4個 )列,可用於確定客戶是經銷商還是用戶 : is_user
, isuser
, is_reseller
和cust_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.