2017-10-02 19 views
-1

テーブル・スクリプトを作成します。SQL Serverの行列に賢明

CREATE TABLE #tempClient 
(
    ClientCode int, 
    ClientName nvarchar(250), 
    BranchType varchar(1), 
    Address nvarchar(250), 
    Mobile Nvarchar(250), 
    HomePh nvarchar(250) 
) 

INSERT INTO #tmpClient 
VALUES (1001, 'Test Client', 'H', 'Maxis Street Petaling Jaya', '0125566789', '0355234678'), 
     (1001, 'Test Client', 'B', 'J street','0168899123', ''), 
     (1002, 'SUper Client', 'H', 'Bukit Bintang', '01289898', '03232232'), 
     (1002, 'Super Client', 'B', 'Klang Road', '0168892345', ''), 
     (1002, 'Super Client', 'B', 'Puteri', '016223344', '035222322') 

を私は、クライアントが本社と複数の支社を持つ必要性を持っているので、私は賢い動的に列に行データを表示したいです。私は完全な答えに到達することはできませんが、クエリの下に、私が思うトリックを行います

ClientCode ClientName BranchType Address      Mobile   HomePh  BAddr1  BMobile1 BHomePh1 BAddr2 BMobile2 BHomePh2 
1001  Test Client H   Maxis Street Petaling Jaya 0125566789  0355234678 J street 0168899123 NULL  NULL  NULL  NULL 
1002  SuperClient H   Bukit Bintang     01289898  03232232 Klang Road 0168892345 NULL  Puteri 016223344 035222322 
+0

何が失敗したのですか? – ZLK

+0

質問を編集してコードを書いて、あなたが持っているものを明確にしてください。結果やエラーなどを表示する – GIJOW

答えて

0

:私はピボットにしようとしているが、私はできないよ、何か提案して下さい

出力する必要があります。あなたは唯一のRow_numberを取るクエリを取る必要があります。

DECLARE @limit INT, 
     @counter INT =1, 
     @dynamicSQL NVARCHAR(MAX) 
Set @limit = (Select MAX(countClientcode) FROM (Select COUNT(ClientCode) As countClientcode,ClientCode FROM #tempClient Group By ClientCode)t) 
SET @dynamicSQL = 'Select ROW_NUMBER() OVER(PARTITION BY t1.ClientCode Order By t1.ClientCode),* FROM #tempClient t1' 
WHILE @counter < @limit 
BEGIN 
    SET @dynamicSQL += ' LEFT JOIN #tempClient t'+CONVERT(NVARCHAR(5),@counter+1) 
         +' ON t'+CONVERT(NVARCHAR(5),@counter) 
          +'.ClientCode = t'+CONVERT(NVARCHAR(5),@counter+1) 
           +'.ClientCode AND t'+CONVERT(NVARCHAR(5),@counter+1) 
            +'.BranchType = ''B'' AND t'+CONVERT(NVARCHAR(5),@counter) 
             +'.Address <> t'+CONVERT(NVARCHAR(5),@counter+1)+'.Address' 
    SET @counter +=1 
END 

SET @dynamicSQL += ' WHERE t1.BranchType = ''H''' 
EXEC(@dynamicSQL) 
関連する問題