iT邦幫忙

0

SQL 資料合併的 判斷欄位

  • 分享至 

  • xImage

各位老手,請問我有一個表格,想要讓他條件一樣的合併並判斷裡面的數值是什麼再顯是什麼,不知道要如何做到呢
SQL Server 2019

https://ithelp.ithome.com.tw/upload/images/20210619/20122928vNiSivTdIM.jpg

ID欄,要把後面的多餘的字元去掉,然後再
ID跟NO跟DIA條件相同讓他合併再一起
https://ithelp.ithome.com.tw/upload/images/20210619/20122928ALLpHUSyrA.jpg

最終 YN欄 有N就顯示N 只有y跟Y就顯示y 有Y就顯示Y
https://ithelp.ithome.com.tw/upload/images/20210619/20122928Ma204A7nk6.jpg

資料

sky800219 iT邦新手 5 級 ‧ 2021-06-19 14:41:25 檢舉
https://ithelp.ithome.com.tw/questions/10204006

好像回答了...
rogeryao iT邦超人 7 級 ‧ 2021-06-19 15:12:21 檢舉
不一樣的問題 :
YN 欄位內的值有區分大小寫,而且取值(顯示)是有順位的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
rogeryao
iT邦超人 7 級 ‧ 2021-06-19 15:02:54
最佳解答

請先確認 SQL Server 是否有區分大小寫,
否則要加入 Collate SQL_Latin1_General_CP1_CS_AS

CREATE TABLE TableX
(ID varchar(20),
NO varchar(20),
DIA varchar(20),
YN varchar(20) Collate SQL_Latin1_General_CP1_CS_AS
);

INSERT INTO TableX 
VALUES
('3201-20210103001','1','A','y'),
('3201-20210103001_002','1','A','Y'),
('3201-20210103001','2','A','y'),
('3201-20210103001_002','2','B','Y'),
('3201-20210103001','2','B','Y'),
('3201-210104001-ari','1','A','y'),
('3201-210104001_01','1','A','N'),
('3201-210104001','1','A','Y'),
('3201-210104001','1','B','N'),
('3201-210104001_02','1','B','N'),
-- 額外加入
('3201-210104003_03','1','B','n'),
('3201-210104004_04','1','B','Y'),
('3201-210104004_04','1','B','Y'),
('3201-210104004_04','1','B','y'),
('3201-210104004_04','1','B','N'),
('3201-210104004_04','1','B','y'),
('3201-210104004_04','1','B','Y'),
('3201-210104004_04','1','B','N'),
('3201-210104004_04','1','B','n')
;
SELECT ID,NO,DIA,YN
FROM (
SELECT ID,NO,DIA,YN,
ROW_NUMBER() OVER (PARTITION BY ID,NO,DIA 
ORDER BY ID,NO,DIA,
CASE WHEN YN='N' THEN 1
     WHEN YN='y' THEN 2
     WHEN YN='Y' THEN 3 
     ELSE 4 END) AS NUM
FROM (
SELECT 
d.vals.value('(/TR/TD)[1]','VARCHAR(20)') +'-'+
d.vals.value('(/TR/TD)[2]','VARCHAR(20)') 'ID',
NO,DIA,YN
FROM (
SELECT CAST('<TR><TD>' + REPLACE(REPLACE(ID,'_','-'), '-', '</TD><TD>') + '</TD></TR>' AS xml) vals,
NO,DIA,YN
FROM TableX) AS d
) AS M
) AS P
WHERE NUM=1

Demo

看更多先前的回應...收起先前的回應...

一開始的時候把, y 用 upper() 轉成 Y.

rogeryao iT邦超人 7 級 ‧ 2021-06-19 16:04:29 檢舉

我有試過,在 dbfiddle.uk 預設好像不分

原來如此.

我看前一題時就知道一定還會有下一題
平常習慣看人糟蹋 Excel
沒想到連 RDBMS 也可以被糟蹋成這個樣子
有點期待下一題
會有什麼樣的挑戰在面前呢
/images/emoticon/emoticon19.gif

Kert iT邦研究生 5 級 ‧ 2021-06-20 07:43:59 檢舉

RDBMS 用EXCEL 觀念做 難怪國內DBA 不值錢

我要發表回答

立即登入回答