2016-05-05 44 views
0

多行我已經在SQL(爲nvarchar,nvarchar的)SQL與同一行名稱

Name: Test Person 
Phone Number: 290831283 
Fax Number: 192389182 
Email Address: [email protected] 
Name: Abacus Testing 
Phone Number: 901823908 
Fax Number: 9213989182 
Email Address: [email protected] 

以下數據我如何格式化這個數據是:

[Name] [Phone Number] [Fax Number] [Email Address] 
Test Person 290831283 192389182 [email protected] 
Abacus Testing 901823908 9213989182 [email protected] 

所以基本上設置行到匹配列

我希望能使用一個數據透視表,但由於聚合,我只得到第一行。

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 

我寧願沒有CURSOR方法,任何替代?

  • 編輯:增加可供使用

等領域可用的其它字段標籤ID爲每個條目。即姓名= 1,電話號碼= 2,傳真號碼= 3,電子郵件地址= 4

4個條目中的每一個的公共ID也是可用的。即前4個條目具有標識1001,後4個條目具有標識1002

+0

問題是你的數據模型。似乎沒有列將前四行分組爲屬於同一個實體,而後四個分組屬於不同的實體。你*不能*依靠他們現在返回的任何順序。 –

+0

顯示數據在您的表中的樣子。不是文字。 –

+1

如果您有某種類型的字段可以告訴您數據的順序,那麼您可以基於此獲取每個組中行的通用編號,然後在數據透視表中使用該編號。 –

回答

1

根據評論中的說明,您只需將CommonId添加到源代碼中即可。

這不是一個聚合或傳播列,因此它將用作分組列,並且您將獲得每行不同值的行。

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      CommonId, 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 
+0

完美,這很容易。我現在明白你的意思是不同的行。 – fes