2015-11-04 66 views
0

我試圖根據另一個表中存在的值(特別是字段爲空)來加入2個表。根據以前的值使用不同字段加入相同的表

根據該字段是否爲空,我想以不同的方式執行LEFT JOIN。

實施例:

  LEFT JOIN (SELECT report_transaction_id, line_number, sale_staff_id, item_type, article_id, sale_count, return_count, line_price_inc_vat, merchandise_category 
         FROM [CRM].[TransactionItems]) ti 
      ON th.report_transaction_id = ti.report_transaction_id 

CASE ti.article_id WHEN IS NULL THEN 

      LEFT JOIN (SELECT TOP 1 article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc 
         FROM [CRM].[Products]) p 
      ON ti.MERCHANDISE_CATEGORY = p.MERCHANDISE_CATEGORY 
ELSE 
     LEFT JOIN (SELECT article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc 
         FROM [CRM].[Products]) p 
      ON ti.article_id = p.article_id 

END 

的情況下部分是示數,與附近有語法錯誤CASE的部分。據我所知,使用CASE不是一種有效的方式來選擇Products表中使用哪些連接,所以我想知道確定哪個連接需要運行的正確方法,

謝謝。

+0

嘗試'CASE什麼時候ti.article_id是NULL那麼' – markpsmith

+0

不幸的是仍然有相同的錯誤。這正是我之前將ti.article_id移到之前的時間 –

回答

0

我不認爲你可以使用CASE這樣,你將不得不做這樣的事情:

LEFT JOIN (SELECT TOP 1 article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc 
FROM [CRM].[Products]) p 
ON ti.MERCHANDISE_CATEGORY = p.MERCHANDISE_CATEGORY 
WHERE ti.article_id IS NULL 
LEFT JOIN (SELECT article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc 
FROM [CRM].[Products]) p 
ON ti.article_id = p.article_id 
WHERE ti.article_id IS NOT NULL 

加入兩個子查詢,但在where子句中使用ti.article_id

你將不得不使用不同的別名第二子查詢(如「Q」),並在主SELECT語句,使用ISNULLCOALESCE返回值,例如:

SELECT ISNULL(p.article_id, q.article_id) 
+0

我擔心這是CASE關鍵字和連接的情況。 我嘗試了推薦的解決方案(使用q進行第二次連接,並且不得不用WHERE替換AND),但沒有收到預期的結果。 p/q表中的所有字段都返回空值。 –

+0

從頭開始,我使用的數據出現問題。這現在看起來適用於NULL字段以及可以與商品表匹配的商品ID,但不適用於無法匹配的商品ID。然而,這比我現在得到的更進一步,謝謝! :) –

0

你用If If語句試過嗎?

+0

我一直試圖讓它設置一個If Else語句可以使用的變量,但一直沒有太大的運氣。 If語句似乎並不想將字段作爲空值作爲參數 –

0

的很大一部分這個問題可能是你使用TOP 1的這個子查詢:

(SELECT TOP 1 article_id, merchandise_category, long_desc, division_code, 
       division_desc, group_code, group_desc 
FROM [CRM].[Products]) 

書面,TOP 1這裏的意思是,「在此查詢一切的獨立,隨機挑選從[CRM] [產品一行。 ],並使用該行作爲我的連接「

我認爲這不是意圖 - 在這種情況下,你需要澄清(英文,如果你不知道SQL語法)你想用TOP 1

完成什麼如果您提供了一些樣本數據並顯示了期望的輸出,這真的是一個有用的情況。

+0

不幸的是,TOP 1似乎是我所要做的事情的一部分。如果商品ID不存在,那麼將使用merchandise_category字段來加入信息。 merchandise_category字段不是唯一的,這意味着每個merchandise_category可能有數千個記錄。隨機選擇一個似乎是當前接受的要求(通過額外的字段對產品進行排序會導致查詢花費太長的時間來處理) –

+0

是的,但是您的語法並不是說「從所有(隨機)與商品類別匹配的行「。它是說,「從整個表格中隨機選取一行」。 – KevinKirkpatrick

相關問題