SQL Server 將資料轉向成橫的列表

這個我不太知道要怎麼明確的定義
用圖來說明比較快
像下圖,是我們資料庫中「訂貨主檔」的列表



現在要做的是,把資料「橫」起來
把所有客戶與其相關的訂單號碼顯示出來,沒有也要顯示



挺不賴的,對吧!
這有用的地方可多了,假設今天購物車買了一大堆
客戶只想知道買了什麼東西,其他的不想知道
這個一表給他就可以了~

程式碼如下:
use 中文北風
go

--先建立個函數,如此才可以在SELECT中呼叫---------------------------------------------
CREATE FUNCTION 訂單號碼名細(@CompanyId VARCHAR(5)) RETURNS NVARCHAR(MAX)
AS
 BEGIN
  DECLARE @OrderNumber NVARCHAR(MAX)
  SET @OrderNumber= ''
  SELECT @OrderNumber = @OrderNumber + CAST(訂單號碼 AS VARCHAR)+', '
  FROM 訂貨主檔
  WHERE 客戶編號 = @CompanyId

  ----因為最後一筆會多個逗號,把它去除
  IF LEN(@OrderNumber) >0
   SET @OrderNumber = SUBSTRING(@OrderNumber,1,LEN(@OrderNumber)-1)
  RETURN @OrderNumber
 END 


SELECT 客戶編號,公司名稱,dbo.訂單號碼名細(客戶編號) AS 列表
FROM 客戶



這樣就完成了,延伸題很像,以下是所有的訂單的列表
可以得知有1個訂單,對應數個產品



把他的產品列出來:


程式碼大同小異:
CREATE FUNCTION 訂單產品名細(@OrderNumber INT) RETURNS NVARCHAR(MAX)
AS
 BEGIN
  DECLARE @Pid  NVARCHAR(MAX)
  SET @Pid =''
  SELECT @Pid= @Pid +產品+', '
  from 訂貨明細 AS A JOIN 產品資料 AS B ON A.產品編號 = B.產品編號
  WHERE 訂單號碼 = @OrderNumber

  IF LEN(@Pid) > 0
   SET @Pid = SUBSTRING(@Pid,1,LEN(@Pid)-1)
  RETURN @Pid
 END

SELECT 訂單號碼,dbo.訂單產品名細(訂單號碼) as 產品列表
FROM 訂貨主檔

留言

熱門文章