iT邦幫忙

0

qqq

sql
  • 分享至 

  • twitterImage

說明:

看更多先前的討論...收起先前的討論...
用中文當欄位名稱,大概是SQL Server
這種方式叫做Unpivot
看以下鏈結,有unpivot()函數可以用.
http://blog.devart.com/is-unpivot-the-best-way-for-converting-columns-into-rows.html
allenlwh iT邦高手 1 級 ‧ 2015-11-19 11:10:02 檢舉
如果u_source的資料有到尺寸100的話,把@最大尺寸設定為=100,就可以直接執行,不用再改其它東西了。
小雨大最近比較忙哦
以前都會直接寫完整答案的
偷笑
手頭上沒有SQL Server....汗
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
純真的人
iT邦大師 1 級 ‧ 2015-11-19 09:59:00
最佳解答

給你個提示

請用善用Union方式~

外獅佬 iT邦大師 1 級 ‧ 2015-11-19 10:15:16 檢舉

union +1

<pre class="c" name="code">
SELECT [商品型號],[商品名稱],'1' AS [尺寸],[尺寸1] AS [庫存] FROM [Table_1]
UNION
SELECT [商品型號],[商品名稱],'2' AS [尺寸],[尺寸2] AS [庫存] FROM [Table_1]
UNION
SELECT [商品型號],[商品名稱],'3' AS [尺寸],[尺寸3] AS [庫存] FROM [Table_1]
UNION
SELECT [商品型號],[商品名稱],'4' AS [尺寸],[尺寸4] AS [庫存] FROM [Table_1]
UNION
SELECT [商品型號],[商品名稱],'5' AS [尺寸],[尺寸5] AS [庫存] FROM [Table_1]
UNION
SELECT [商品型號],[商品名稱],'6' AS [尺寸],[尺寸6] AS [庫存] FROM [Table_1]
外獅佬 iT邦大師 1 級 ‧ 2015-11-19 10:16:27 檢舉

要避開null或者庫存為0,每個select子句加上where條件就好了

simon0627 iT邦新手 2 級 ‧ 2015-11-20 10:50:25 檢舉

已測試 唯若尺寸若遠大於6 可能非常麻煩

WilliamHuang
iT邦研究生 1 級 ‧ 2015-11-19 09:46:17
【**此則訊息已被站方移除**】
2
allenlwh
iT邦高手 1 級 ‧ 2015-11-19 11:14:07

如果u_source的資料有到尺寸100的話,把@最大尺寸設定為100,這個script就可以直接執行,不用再改其它地方。

<pre class="c" name="code">declare @sql nvarchar(max)

declare @目前尺寸 int
declare @最大尺寸 int

set @sql=''
set @目前尺寸=1
set @最大尺寸=6

while @目前尺寸<=@最大尺寸
begin
	set @sql='insert into u_target (商品型號,商品名稱,尺寸,數量) '
	set @sql=@sql+'select 商品型號,商品名稱,'''+CONVERT(varchar(2),@目前尺寸)+''',尺寸'+CONVERT(varchar(2),@目前尺寸)+' from u_source where 尺寸'+CONVERT(varchar(2),@目前尺寸)+'>0'
	
	EXECUTE sp_executesql @sql
	set @目前尺寸=@目前尺寸+1
end
simon0627 iT邦新手 2 級 ‧ 2015-11-20 11:07:02 檢舉

若只改 u_source 大該也動不了吧 沒有u_target table ,而u_source 欄位 名稱未必一樣所以動不了 .... 當然依範例所提供的table 名稱 是可以執行的 感謝你分享了一種新的方式

2
rodchi
iT邦新手 5 級 ‧ 2015-11-20 09:32:33

這問題看起來應該是一個要求用pivot的(作業?)

看更多先前的回應...收起先前的回應...
ander6879 iT邦新手 5 級 ‧ 2015-11-20 10:41:20 檢舉

QQ

simon0627 iT邦新手 2 級 ‧ 2015-11-20 11:18:38 檢舉

ander6879提到:
品庫存名細中再

看不太懂你的加重,若你還想加入其它table 建議以allenlwh 產生了新的table 在去join 你的size table 應該就可以了

simon0627 iT邦新手 2 級 ‧ 2015-11-20 11:23:35 檢舉

pivot 感謝又學到新東西 目前到是沒想到如何運用在此例子上

說實在的.....題目歸題目的設計...

實際上沒有人會將資料這麼紀錄...完全沒邏輯的存資料...

ander6879 iT邦新手 5 級 ‧ 2015-11-24 10:11:52 檢舉

謝謝各位:最終是要面對一個最難的題型了。
==>如圖中的上方資料表欄位,需拆成下方資料明細。該如何下語法。
先前忘了有上傳圖檔這個功能,導至問題混淆。故貼圖上傳

ander6879 iT邦新手 5 級 ‧ 2015-11-24 10:12:29 檢舉

qq

ander6879 iT邦新手 5 級 ‧ 2015-11-24 16:00:07 檢舉

QQ

rodchi iT邦新手 5 級 ‧ 2015-11-25 09:51:21 檢舉

jer5173 說:
說實在的.....題目歸題目的設計...

實際上沒有人會將資料這麼紀錄...完全沒邏輯的存資料...
2015-11-20 17

的確實務上是不會有這種設計方式,但是確有可能因為特殊的報表需求,
會有類似這樣的轉換輸出.

我要發表回答

立即登入回答