iT邦幫忙

0

T-SQL查詢問題

sql

請問:
如查詢一筆交易欄位資料是:
日期 || 訂單編號 || 贈品1 || 贈品1數量 || 贈品2 || 贈品2數量 || 贈品3 || 贈品3數量
2014/8/23|| A082301 || K背包|| 1 ||J洗面乳|| 3 ||E耳環 ||2

T-sql語法查詢語法要怎麼寫,才會變成三筆資料
日期 || 訂單編號 || 贈品 || 贈品數量
2014/8/23 || A082301 ||K背包 || 1
2014/8/23 || A082301|| J洗面乳 || 3
2014/8/23 || A082301 ||E耳環 || 2
感謝指導..

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
外獅佬
iT邦大師 1 級 ‧ 2014-08-24 00:21:54
最佳解答
<pre class="c" name="code">
SELECT 日期,訂單編號,贈品1 AS 贈品,贈品1數量 AS 贈品數量 FROM 資料表 WHERE 條件
UNION ALL
SELECT 日期,訂單編號,贈品2 AS 贈品,贈品2數量 AS 贈品數量 FROM 資料表 WHERE 條件
UNION ALL
SELECT 日期,訂單編號,贈品3 as 贈品,贈品3數量 AS 贈品數量 FROM 資料表 WHERE 條件
6
erictaiwan
iT邦研究生 5 級 ‧ 2014-08-23 15:34:55

MSSQL 語法如下, 關鍵指令: union all

<pre class="c" name="code">
select POdate, PO, Gift1, Gift1Qty from PO where PO = 'A082301'
union all
select POdate, PO, Gift2, Gift2Qty from PO where PO = 'A082301'
union all
select POdate, PO, Gift3, Gift3Qty from PO where PO = 'A082301'
0
bluesky1213
iT邦新手 3 級 ‧ 2014-08-25 13:44:50

利用UNPIVOT
可參考 使用 PIVOT 和 UNPIVOT
http://technet.microsoft.com/zh-tw/library/ms177410(v=sql.105).aspx

<pre class="c" name="code">IF OBJECT_ID('tempdb.dbo.#TempTable') IS NOT NULL
    DROP TABLE #TempTable
    
Create Table #TempTable(
日期 DateTime,
訂單編號 nvarchar(20),
贈品1 nvarchar(20),
贈品1數量 decimal(19, 1),
贈品2 nvarchar(20),
贈品2數量 decimal(19, 1),
贈品3 nvarchar(20),
贈品3數量 decimal(19, 1)
)

Insert into #TempTable
(
日期,
訂單編號,
贈品1,
贈品1數量,
贈品2,
贈品2數量,
贈品3,
贈品3數量

)
values
(
'2014/8/23', 'A082301', 'K背包',1,'J洗面乳', 3,
'E耳環', 2
)

select * from #TempTable


select 日期,
	   訂單編號,
	   贈品,
	   (CASE 贈品 WHEN '贈品1' THEN 贈品1數量  WHEN '贈品1' THEN 贈品2數量  WHEN '贈品3'THEN 贈品3數量 ELSE 0 END)AS 數量
from
(
	select 日期,
		訂單編號,
		贈品1,
		贈品1數量,
		贈品2,
		贈品2數量,
		贈品3,
		贈品3數量
	from #TempTable
)p
unpivot
( 數量 for 贈品
		in(
			贈品1,
		贈品2,
		贈品3
		)
)AS unpvt
外獅佬 iT邦大師 1 級 ‧ 2014-08-26 16:09:59 檢舉

這個問題....應該不需要動用到pivot這個大傢伙....

我要發表回答

立即登入回答