討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 軟體開發過程中有哪些資安漏洞?
[ 回上頁 ] [ 討論區發言規則 ]
資料表的攤平
更改我的閱讀文章字型大小
作者 : hijack614(hijack)
[ 貼文 5 | 人氣 963 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/27 上午 01:08:58
目前正在學習SQLserver可是遇到一個問題想了很久就是想不到
我現在有一個資料表
有: ID , TYPE, 價錢 三個欄位
我想要把type這個欄位下的資料攤平,就是將各種type放到上面當作欄位名稱然後下面做計數
這個問題我想了很久就是想不出來,有沒有大大可以給我提示
作者 : hijack614(hijack)
[ 貼文 5 | 人氣 963 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/27 上午 01:18:34
我再將問題描述清楚一點
資料表中有: ID , TYPE, 價錢 三個欄位
我想要把type這個欄位下的資料攤平,就是將各種type放到上面當作欄位名稱然後對於每個id所購買的type於表中做計數 最後求出每個id所購買的總金額,目前最大的問題在於資料的攤平^^
作者 : eliot(小台) VB.Net卓越專家SQL Server 7/2K卓越專家ASP.Net頂尖高手貼文超過2000則人氣指數超過10000點
[ 貼文 2213 | 人氣 28768 | 評價 9240 | 評價/貼文 4.18 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/27 上午 11:50:36
利用 Reporting Service中的 Cross Table就可以做到啦
作者 : hijack614(hijack)
[ 貼文 5 | 人氣 963 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/27 下午 09:45:33
我不太懂這個要怎麼使用耶,不過如果純粹使用SQL的語言來寫了話要怎麼寫呢?
可以給我一點提示嗎^^
作者 : eliot(小台) VB.Net卓越專家SQL Server 7/2K卓越專家ASP.Net頂尖高手貼文超過2000則人氣指數超過10000點
[ 貼文 2213 | 人氣 28768 | 評價 9240 | 評價/貼文 4.18 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/2 下午 12:29:35
用SQL(查詢語言)做不到啦~~~
你去用Reporting Service把type資料放到Cross Table橫軸就好啦!

作者 : adriano(Adriano)
[ 貼文 73 | 人氣 2 | 評價 310 | 評價/貼文 4.25 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人hijack614註記此篇回應為很有道理 2007/1/2 下午 12:48:16
使用 SQL 2005 的話可以使用 Pivot / Unpivot 的語法達成,詳細資料請參考線上參考手冊,查詢 Pivot Unpivot

如要使用純 SQL 語法..

1. 將價錢 Sum 起來成子查詢
2. 將各 Type 分別查詢出來後做 Join

例:

Select b.價錢 As 'Type1', c.價錢 As 'Type2' From
(Select 'Type' As type, 價錢 From
( Select Type, Sum(價錢) As 價錢 From table Group By Type ) As a
Where Type = 'Type1' ) As b
Inner Join
(Select 'Type' As type, 價錢 From
( Select Type, Sum(價錢) As 價錢 From table Group By Type ) As a
Where Type = 'Type2' ) As c
On b.type = c.type
作者 : hijack614(hijack)
[ 貼文 5 | 人氣 963 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/2 下午 08:23:54
感謝大家的回應,我已經找到怎麼將資料表攤平了
select [ID],
sum( case when [prodno] = 'A' then [prodno_count] else 0 end) as [A_count],
sum( case when [prodno] = 'B' then [prodno_count] else 0 end) as [B_count],
sum( case when [prodno] = 'C' then [prodno_count] else 0 end) as [C_count],
sum( case when [prodno] = 'D' then [prodno_count] else 0 end) as [D_count],
sum( case when [prodno] = 'A' then [total_price] else 0 end) as [A_total_price],
sum( case when [prodno] = 'B' then [total_price] else 0 end) as [B_total_price],
sum( case when [prodno] = 'C' then [total_price] else 0 end) as [C_total_price],
sum( case when [prodno] = 'D' then [total_price] else 0 end) as [D_total_price]
from #DBFF_table1
group by [custno]
order by [custno]
此種作法就可以將已經整理好的TABLE攤平了
 板主 : 徵求中
 > SQL Server 7/2000 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Server 7/2000 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Server 7/2000
1 小朱 1540 
2 小台 1520 
3 Gordon 600 
4 ㄉ一ˊㄎㄜˋ 580 
5 路人 490 
6 max 470 
7 william 410 
8 Aries 250 
9 阿利 180 
10 羅啟章 160 
SQL Server 7/2000
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875