我有一個複雜的查詢((Q1 union Q2)intersect(Q3 union Q4))。現在問題是涉及查詢的列中有一列具有「公司」的價值。這個值可以是一個特定的公司名稱或值爲'ALL',這意味着所有公司。我有一張單獨的公司名單,列出了公司名稱。現在邏輯是,如果相交查詢中有一個查詢的值爲'ALL',另一個查詢是公司'C1',則結果應該返回'C1'。但目前由於'ALL'與字符串值不匹配'C1',相交不會返回任何東西。 無論如何,我可以用所有公司名稱替換'ALL'行值,然後做相交?我想通過SQL來完成所有的操作,因爲在代碼中處理它將非常麻煩。我正在使用基於DB2的DashDB。用另一個表中的多個值替換列值 - DB2
回答
這是解決我的問題(我已經從查詢中刪除複雜性,只包括與此相關的問題的部分)
SELECT AA.OBJECT_TYPE查詢, AA.OBJECT_FILTER_ID,CASE WHEN BB.OBJECT_FILTER_VALUE = 'ALL' THEN ELSE AA.OBJECT_FILTER_VALUE END BB.OBJECT_FILTER_VALUE AS OBJECT_FILTER_VALUE FROM(SELECT OBJECT_TYPE,OBJECT_FILTER_ID,從COMPANY OBJECT_FILTER_VALUE)AS AA INNER JOIN (SELECT OBJECT_TYPE,OBJECT_FILTER_ID,OBJECT_FILTER_VALUE FROM DETAILS) AS BB ON AA.OBJECT_ TYPE = BB.OBJECT_TYPE AND AA.OBJECT_FILTER_ID = BB.OBJECT_FILTER_ID AND(AA.OBJECT_FILTER_VALUE = BB.OBJECT_FILTER_VALUE OR AA.OBJECT_FILTER_VALUE = '所有' 或BB.OBJECT_FILTER_VALUE = 'ALL')
這應該工作:
select
company_name
,the
,other
,columns
from
(
select distinct
company_name = ca.company_name
,the
,other
,columns
from Q1
inner join companies_table ca
on Q1.company_name = ca.company_name
or Q1.company_name = 'ALL'
union
select distinct
company_name = ca.company_name
,the
,other
,columns
from Q2
inner join companies_table ca
on Q2.company_name = ca.company_name
or Q2.company_name = 'ALL'
) a
intersect
select
company_name
,the
,other
,columns
from
(
select distinct
company_name = ca.company_name
,the
,other
,columns
from Q3
inner join companies_table ca
on Q3.company_name = ca.company_name
or Q3.company_name = 'ALL'
union
select distinct
company_name = ca.company_name
,the
,other
,columns
from Q4
inner join companies_table ca
on Q4.company_name = ca.company_name
or Q4.company_name = 'ALL'
) b
可以簡化您的查詢是這樣的:。
SELECT AA.OBJECT_TYPE, AA.OBJECT_FILTER_ID,
CASE WHEN BB.OBJECT_FILTER_VALUE = 'ALL' THEN AA.OBJECT_FILTER_VALUE ELSE BB.OBJECT_FILTER_VALUE END AS OBJECT_FILTER_VALUE
FROM COMPANY AS AA
INNER JOIN DETAILS AS BB ON (AA.OBJECT_TYPE, AA.OBJECT_FILTER_ID)=(BB.OBJECT_TYPE, BB.OBJECT_FILTER_ID)
AND(AA.OBJECT_FILTER_VALUE = BB.OBJECT_FILTER_VALUE OR AA.OBJECT_FILTER_VALUE = 'ALL' OR BB.OBJECT_FILTER_VALUE = 'ALL')
這看起來很酷。不知道這個語法。感謝您的建議。 – Indrani
- 1. 使用另一個表中的值替換表列中的值
- 2. Haskell用另一個值替換列表中的值
- 3. R:用另一列中的值替換多列數據幀中的多個值
- 4. bash(用另一個文件中的值替換列中的值)
- 5. 在SELECT語句中用另一個表替換另一個值
- 6. SQL Server 2008 - 用另一個表中的值替換列中的文本值
- 7. 將一個數據幀列值替換爲另一個值
- 8. Excel - 用另一列中的值替換一列中的值
- 9. 用列表中的前一個值替換不需要的值
- 10. REGEXP_REPLACE用單個語句中的值列表替換值列表
- 11. R data.table替換多個列中的值
- 12. 如何用sql loader中的另一個值替換值?
- 13. 如何根據另一個表中的值搜索並替換某些列值?
- 14. 用另一個表替換列
- 15. 替換列在MySQL中另一個表中的列的值選擇
- 16. Erlang,用列表中的另一個替換一個原子
- 17. 在循環中用另一個變量的值替換一個變量的值
- 18. 如何創建一個表作爲另一個表的副本並用一個語句中的列替換值
- 19. 使用DB2中的連接將多值列從一個表映射到另一個表
- 20. Excel VBA將列值替換爲另一個值?
- 21. Python - 如何用另一個列表中的字符串值替換列表中存儲的字符串值?
- 22. 一個DB2 Trigger來計算另一個表的平均值
- 23. 根據Microsoft PowerBI中另一個(B)列的值替換(A)列的值
- 24. 用兩個值替換無列表
- 25. 在SQL Server中,如何用另一個值替換秒值?
- 26. XQuery - 用解密值替換xml值(db2)
- 27. 如何用oracle中的另一個值替換列中的前兩個字符
- 28. 如何用另一個值替換正在更改的陣列?
- 29. Spark:用另一列中的值替換缺失值
- 30. 從另一列的值的列表中創建多個列
代替'intersect'使用'INNER JOIN' - 你需要的所有列和'company'列將看起來像'AND(T1 [公司] = T2加入[公司]或T1。[公司] ='ALL')' – gotqn
感謝您的迴應。我會盡力讓你知道。但我有一個困惑。這兩個表都有公司專欄。那麼在select子句中提供哪一方? T1.Company或T2。公司?我需要公司的價值不是'全部'?我怎麼知道它將在哪個表中? – Indrani
感謝內部加入並加入'ALL'條件。該方法奏效。 – Indrani