我想解決一個問題,我似乎無法找到一個簡單的解決方案。我試圖編寫一個查詢,它使用一個case語句來返回基於某些值的值。在同一個查詢中,我還需要返回一個orderid,因爲我需要將這個返回的數據用於另一個查詢。SQL Server的情況下,當沒有行返回時,返回一個值時,SQL Server的情況下
下面是查詢:
select CASE WHEN count(name) = 0 THEN '1' ELSE CONVERT(varchar,count(name) + 1) END AS box
, orderid
from order
where len(name) = 7
and orderid = 'XYZ'
group by orderid
上面的問題是,你可以想像,一個行只有當一個長度爲7名在數據存在返回。無論如何,我需要這個查詢來返回一個有效的值。
查詢應該返回:1, XYZ
當沒有長度爲7的名稱存在時。當存在有效的7長度名稱時,查詢確實有效。
處理此問題的最佳方法是什麼?請注意,數據可以包含長度小於7的多個名稱。在事務發生後,這些名稱將更改爲長度7。
下面是樣本數據和預期的結果:
NAME ORDERID
ABC 001
XYZ 001
123 001
OOP 002
LMT 002
當我跑我的orderid = '1'
查詢,查詢應該返回1, 001
。數據將不斷變化,所以最初如上圖所示。由於交易發生時,數據將被改變:
NAME ORDERID
ABCABCABC 001
XYZ 001
123 001
OOP 002
LMT 002
在這一點上,我不擔心我上面的查詢,因爲它會返回一個有效行:2, 001
問題是當名稱列我們不正確的長度,查詢返回什麼。
使用從一個查詢的數據得到的數據用於另一個查詢通常是一個很好的指示器,需要一個'JOIN'和可能更好的過濾器。一次調用數據庫獲取你想要的數據比多次調用要好得多。 – Shawn
不幸的是,我不能加入它的過濾器,就像使用了上面的表/邏輯一樣,由於沒有名稱,連接將返回沒有行,長度爲7。一旦數據存在,這個問題就解決了,但直到這一點它不起作用。 – Help123
樣本數據和期望的結果真的有幫助。 –