簡體   English   中英

SQL獲取基於列的單行中的合並行

[英]SQL to get combine rows in single row based on a column

我有一張桌子,如下所示:

+---+---+---+
|obj|col|Val|
+---+---+---+
|1  |c1 | v1|
+---+---+---+
|1  |c2 | v2|
+---+---+---+
|2  |c1 | v3|
+---+---+---+
|2  |c2 | v4|
+---+---+---+

我正在尋找將以以下格式給出結果的SQL

+---+---+---+
|obj|c1 |c2 |
+---+---+---+
|1  |v1 | v2|
+---+---+---+
|2  |v3 | v4|
+---+---+---+

在此SQL中,我正在檢查col ='c?' 並打印出相應的Val。 但是分組依據的原因是要避免所有NULL值,以防條件不匹配。 通過在obj上分組,將避免所有NULL值並產生所需的結果。

SELECT obj,
       MAX( CASE WHEN col = 'c1' THEN Val END ) AS c1,
       MAX( CASE WHEN col = 'c2' THEN Val END ) AS c2
  FROM Table
 GROUP BY obj;

首先,您需要從表中選擇所有唯一ID

select distinct id
from a_table_you_did_not_name

如何使用它來離開您的專欄

select base.id, one.val as c1, two.val as c2
from (
  select distinct id
  from a_table_you_did_not_name
) base
left join a_table_you_did_not_name one on one.id = base.id and one.col = 'c1'
left join a_table_you_did_not_name two on two.id = base.id and two.col = 'c2'

注意:您的案例是這種連接的一個相對簡單的案例-我這樣編碼,因為使用我的方法可以擴展到更復雜的案例,並且仍然可以使用。 對於此特定要求,還有其他一些方法可能會更簡單。

特別是最常見的一種是聯接到多個表,而不是所有表都在同一表中。 在這種情況下,我的方法仍然有效。

暫無
暫無

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

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