請問:
如查詢一筆交易欄位資料是:
日期 || 訂單編號 || 贈品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
感謝指導..
<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 條件
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'
利用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