[英]SQL enter different in SELECT table than actual table data, based off if statement
我是SQL的新手,但找不到能夠在這里做我想做的事情的好方法。
目標:根據條件,在列中輸入與SELECT通常無法檢索的數據不同的數據
在下面的示例中,我想要表1的A列中的所有數據,但我想將所有'C'實例替換為'X'。
IE:
Table 1 Table 2
----------------------------
| A | B | | A | C |
-------------------------------
| y | 5 | | y | 17 |
-------------------------------
| z | 2 | | z | 8 |
所選數據:
--------------
| C |
------------
| X |
------------
| 8 |
SELECT
t.C
FROM Table1 t with(nolock)
INNER JOIN Table2 tp with (nolock)
ON tp.A = t.A
WHERE t.a in ('y', 'z')
(對於此示例,WHERE語句可能有點過時,試圖將我的工作代碼轉換為非煽動性語言,而我只有70%的人理解我在做什么)
主要思想是我在“ C”列中選擇了數據,但將數據“ 17”的實例替換為值“ X”。 編寫的代碼不會執行此替換,只是想要我現在擁有的結構。 請注意,這只是更改選擇表中的數據,而不更新服務器上的表2數據。
任何幫助,將不勝感激,謝謝!
================================
感謝Barmar使用解決方案
SELECT
t.A,
CASE WHEN (t.C = 17), THEN 'X' else t.C END [Title of Column]
其余的陳述是相同的。 請注意,盡管由於C列數據是數字,所以此方法不適用於上面的示例,我想將其替換為'X'字符。 您可以將其替換為相同的數據類型,或者在ELSE語句中默認將列替換為“其他字符串值”,這樣就可以了。
使用IF
或CASE
SELECT IF(t2.C = 17, 'X', t2.c) AS C
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.A = t2.A
WHERE t1.A IN ('y', 'z')
SELECT CASE t2.C
WHEN 17 THEN 'X'
ELSE t2.C
END AS C
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.A = t2.A
WHERE t1.A IN ('y', 'z')
有許多方法可以做到這一點,確定哪種方法最好取決於更廣泛的要求。 @barmar提供了幾種方式,我的首選方式是按照以下方式使用解碼。
with T1 as (select 'y' as A, '5' as B from dual
union select 'z', '2' from dual),
T2 as (select 'y' as A, '17' as C from dual
union select 'z', '8' from dual)
select decode(T2.C, 17, 'X', T2.C) from T1
inner join T2 on T1.A = T2.A
where T1.A in ('y', 'z');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.