我想選擇某品牌的產品,如果品牌未包含在表格中,請選擇品牌名稱爲「all」的產品。我有這樣的表格:如何根據SQL Server中是否存在大小寫選擇行?
Discount | Brand
20 | ford
10 | all
而且我有名爲@Brand_name的查詢參數。我想要的只是返回品牌的比率,如果存在表中。否則,返回品牌名稱爲「全部」的費率。什麼是這樣做的正確的查詢。謝謝你的幫助。
我想選擇某品牌的產品,如果品牌未包含在表格中,請選擇品牌名稱爲「all」的產品。我有這樣的表格:如何根據SQL Server中是否存在大小寫選擇行?
Discount | Brand
20 | ford
10 | all
而且我有名爲@Brand_name的查詢參數。我想要的只是返回品牌的比率,如果存在表中。否則,返回品牌名稱爲「全部」的費率。什麼是這樣做的正確的查詢。謝謝你的幫助。
試試這個:
SELECT TOP 1 Discount
FROM mytable
WHERE Brand = @Brand_name OR Brand = 'all'
ORDER BY CASE
WHEN Brand = 'all' THEN 1
ELSE 0
END
查詢返回總是一個紀錄,因爲與Brand = 'all'
記錄被選中,TOP 1
是SELECT
子句中使用。
如果您有更多的一個'Brand'
記錄,你想個個的返回,那麼你可以使用下面的查詢:
;WITH CTE AS (
SELECT Discount,
RANK() OVER (ORDER BY CASE
WHEN Brand = 'all' THEN 1
ELSE 0
END) AS rnk
FROM mytable
WHERE Brand = @Brand_name OR Brand = 'all'
)
SELECT Discount
FROM CTE
WHERE rnk = 1
我需要第二個解決方案,因爲有多個具有相同品牌名稱的行。它解決了這個問題。謝謝。 –
試試這個請:
IF EXISTS (SELECT 1 FROM table1 WHERE Brand = @Brand_name)
BEGIN
SELECT Discount FROM table1 WHERE Brand = @Brand_name
END
ELSE
BEGIN
SELECT Discount FROM table1 WHERE Brand = 'all'
END
添加這個作爲另一個溶膠ution,不知道但如果這是更好的:
SELECT TOP 1 Discount FROM (
SELECT Discount FROM table1 WHERE [email protected]_name
UNION SELECT Discount FROM table1 WHERE BrandName='all'
) discount
將返回2行@Brand_name存在。 – jarlh
感謝您注意@jarlh,編輯。 –
我會去不同的方法,我認爲可能會產生更好的性能:
SELECT top 1 discount ,
brand
FROM
(SELECT discount ,
brand ,
selector ,
min(selector) over() [minselect]
FROM
(SELECT discount ,
brand ,
1 [selector]
FROM mytable
WHERE brand = 'ford'
UNION ALL
SELECT discount ,
brand ,
2 [selector]
FROM mytable WHERE brand = 'all') r
GROUP BY discount ,
brand ,
selector) r
WHERE selector = minselect
ORDER BY discount DESC
可以應用情況,然後再寫查詢。 –