簡體   English   中英

SQL 列名作為行值

[英]SQL Column Name as Row Value

我有一個包含“區域”、“目標”和“實際”列的表格,如下所示。

地區 目標 實際的
一種 10 1
20 2

我想用我的查詢更改此表,以便目標列和實際列按如下方式排列。

地區 類型 數量
一種 目標 10
一種 實際的 1
目標 20
實際的 2

我應該如何為此准備查詢或我應該使用哪種方式? 提前致謝。

您可以為此使用 UNION:

select region, 'Target' as type, target as amount
from the_table
union all
select region, 'Actual' as type, actual
from the_table
order by region, type desc

另一種選擇是使用橫向連接從列中構造兩行:

select t.region, x.*
from the_table t
  cross join lateral (
    values ('Target', target), ('Actual', actual)
  ) as x(type, amount)
order by t.region, x.type desc;  

這兩個查詢都是 100% 標准的 ANSI SQL。 然而,並非所有數據庫產品都支持橫向連接或類似的VALUES子句。

您可以使用UNPIVOT對表格進行單一訪問,該表格完全符合描述的內容:

 select /*+ gather_plan_statistics */ * from t unpivot( Amount for Type_ in ( Target as 'Target' , Actual as 'Actual' ) )
\n地區 | 類型_ | 數量\n :----- |  :----- |  -----:\n一個 | 目標 |  10\n一個 | 實際 |  1\n乙 | 目標 |  20\n乙 | 實際 |  2\n
\n |  PLAN_TABLE_OUTPUT |\n |  :------------------------------------------------- --------------------------------------------- |\n |  SQL_ID 9rr5wa2yjxf42,子編號 0 |\n |  ------------------------------------- |\n |  select /*+ gather_plan_statistics */ * from t unpivot( Amount for |\n | 輸入_(目標為'目標',實際為'實際'))|\n |  |\n | 計划哈希值:605266837 |\n |  |\n |  -------------------------------------------------- --------------------------------------------- |\n |  | 身份證 | 操作 | 姓名 | 開始 | 電子行 |  A行 | 時代 | 緩沖器 | 閱讀 |  |\n |  -------------------------------------------------- --------------------------------------------- |\n |  |  0 | 選擇語句 |  |  1 |  |  4 |00:00:00.01 |  2 |  1 |  |\n |  |* 1 | 查看 |  |  1 |  4 |  4 |00:00:00.01 |  2 |  1 |  |\n |  |  2 | 轉軸 |  |  1 |  |  4 |00:00:00.01 |  2 |  1 |  |\n |  |  3 | 表訪問已滿|  T |  1 |  2 |  2 |00:00:00.01 |  2 |  1 |  |\n |  -------------------------------------------------- --------------------------------------------- |\n |  |\n | 謂詞信息(由操作 id 標識):|\n |  -------------------------------------------------- - |\n |  |\n |  1 - filter("unpivot_view_005"."AMOUNT" 不為空) |\n |  |\n

db<> 在這里擺弄

暫無
暫無

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

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