簡體   English   中英

拆分表並在沒有公共列的情況下執行連接

[英]Split the table and perform joining without common column

表數據如下所示:

輸入 :

version value  code   type     year
PMS    0.00    01    HOURS     2006
000    312.00  01    HOURS     2006
000    0.00    04    HOURS     2006
PMS    0.00    01    NON STOCK 2006
000    835.00  01    NON STOCK 2006
000    835.00  04    NON STOCK 2006
000    0.00    04    HOURS     2007

我需要根據代碼(01 和 04)拆分表格並獲取相應的數據,然后加入兩個結果。 所以我的輸出應該如下所示

預期產出

 version value  code   type      year   version value  code    type      year
  PMS    0.00    01    HOURS     2006   000      0.00    04    HOURS     2006
  000    312.00  01    HOURS     2006   000      835.00  04    NON STOCK 2006
  PMS    0.00    01    NON STOCK 2006   000      0.00    04    HOURS     2007
  000    835.00  01    NON STOCK 2006   null     null   null   null      null 

我按照這篇文章嘗試了 row_num 方法How join two tables using SQL without a common column

但我的輸出是這樣的:

version value  code   type      year   version value  code    type      year
  PMS    0.00    01    HOURS     2006   000      0.00    04    HOURS     2006
  000    312.00  01    HOURS     2006   000      835.00  04    NON STOCK 2006
 

我正在使用 Azure 數據塊(SQL-Server)

提前致謝 !!

我正在使用 SQL Server,所以我認為這適用於數據塊實現。

基本上我創建了 2 個派生表(我寫了 2 個查詢來給出每個代碼的 row_number 值),然后對這些表進行左連接以給出與您的樣本匹配的結果

declare @input table (version nvarchar(max), value nvarchar(max), code nvarchar(max), type nvarchar(max), year int);

insert @input (version, value, code, type, year)
values
('PMS', '0.00', '01', 'HOURS', 2006),
('000', '312.00', '01', 'HOURS', 2006),
('000', '0.00', '04', 'HOURS', 2006),
('PMS', '0.00', '01', 'NON STOCK', 2006),
('000', '835.00', '01', 'NON STOCK', 2006),
('000', '835.00', '04', 'NON STOCK', 2006),
('000', '0.00', '04', 'HOURS', 2007)


select *
from @input; /*original data*/

select *
from /*desired output*/
(
    select ROW_NUMBER() over(order by code) as id, *
    from @input
    where code = '01'
) a
left join
(
    select ROW_NUMBER() over(order by code) as id, *
    from @input
    where code = '04'
) b on a.id = b.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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