亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL轉置全表

SQL轉置全表

達令說 2019-08-08 16:45:49
SQL轉置全表我需要在MS SQL中進行以下轉置從:Day  A  B ---------Mon  1  2Tue  3  4Wed  5  6Thu  7  8Fri  9  0以下內容:Value Mon Tue Wed Thu Fri --------------------------A      1   3   5   7   9B      2   4   6   8   0我知道PIVOT當只有一列(A)時怎么做,但是當有多列要轉置時我無法弄清楚怎么做(A,B,...)要轉置的示例代碼:select LEFT(datename(dw,datetime),3) as DateWeek,   sum(ACalls) as A,   Sum(BCalls) as B from DataTablegroup by LEFT(datename(dw,datetime),3)表結構:Column DataTypeDateTime DatetimeACalls intBCalls int任何幫助都感激不盡。
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

為了將數據轉換為您想要的結果,您需要同時使用UNPIVOTPIVOT函數。

UNPIVOT函數接受AB列并將結果轉換為行。然后,您將使用該PIVOT函數將day值轉換為列:

select *from(
  select day, col, value  from yourtable  unpivot
  (
    value    for col in (A, B)
  ) unpiv) srcpivot(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)) piv

請參閱SQL Fiddle with Demo。

如果您使用的是SQL Server 2008+,則可以使用CROSS APPLYwith VALUES來取消數據的移動。您的代碼將更改為以下內容:

select *from(
  select day, col, value  from yourtable  cross apply
  (
    values ('A', A),('B', B)
  ) c (col, value)) srcpivot(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)) piv

請參閱SQL Fiddle with Demo

編輯#1,將您當前的查詢應用到上述解決方案中,您將使用類似于此的內容:

select *from(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)) srcpivot(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)) piv


查看完整回答
反對 回復 2019-08-08
  • 1 回答
  • 0 關注
  • 1067 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號