簡體   English   中英

如何將多列相同數據合並為一列?

[英]How can I combine multiple columns of the same data into a single column?

我在這里有一個問題是由於數據格式不佳(不是代表我)引起的。 我從具有全國范圍數據的外部實體下載了一個大型 CSV 文件 - 它有大約 5,000,000 多行,因此文件太大而無法打開,更不用說手動操作數據了。 我確實將其上傳到我們的 SQL 數據庫,但是將數據轉換為可用格式很困難; 每行有10個不同的類別代碼,每個類別可以有多個代碼。 不幸的是,他們添加了新列來處理這個問題,而不是添加新行。 沒有例子很難描述:

ID  A_Code1 A_Code2 A_Code3 B_Code1 B_Code2 B_Code3
1   123     765     654     qwe     asd     zxc
2   987     345     567     poi     lkj     mnb

這就是我需要的:

ID  A_Code  B_Code
1   123     qwe
1   765     asd
1   654     zxc
2   987     poi
2   345     lkj
2   567     mnb

現在的設置方式使得查詢幾乎不可能,因為每行大約有 10 種不同的類型,並且每種代碼類型有 10 列。 這意味着當我只需要查詢 10 個時,我必須查詢 100 個不同的列。

如果有人知道這樣做的方法,將不勝感激。 到目前為止我還沒有找到這樣的東西,所以我很絕望!

謝謝!

您需要將多列數據反透視為多行,根據您的 SQL Server 版本,有多種方法可以獲得結果。

如果使用 SQL Server 2005+,您可以使用CROSS APPLYUNION ALL

select id, A_Code, B_Code
from yourtable
cross apply
(
  select A_Code1, B_Code1 union all
  select A_Code2, B_Code2 union all
  select A_Code3, B_Code3
) c (A_Code, B_Code);

請參閱SQL Fiddle with Demo

如果使用 SQL Server 2008+,您還可以將CROSS APPLYVALUES使用:

select id, A_Code, B_Code
from yourtable
cross apply
(
  values
    (A_Code1, B_Code1),
    (A_Code2, B_Code2),
    (A_Code3, B_Code3)
) c (A_Code, B_Code);

請參閱SQL Fiddle with Demo

這允許您將列轉換為成對的行 - 這意味着A_Code1B_Code1將在最終結果中匹配。

您還可以使用UNION ALL

select id, A_Code = A_Code1, B_Code = B_Code1
from yourtable 
union all
select id, A_Code = A_Code2, B_Code = B_Code2
from yourtable 
union all
select id, A_Code = A_Code3, B_Code = B_Code3
from yourtable ;

參見SQL Fiddle with Demo

暫無
暫無

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

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