簡體   English   中英

SQL在SELECT表中輸入的內容與實際表數據不同,基於if語句

[英]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語句中默認將列替換為“其他字符串值”,這樣就可以了。

使用IFCASE

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM