具有類似於將多個SQL字段組合成1個輸出行
的SQL表用戶標識|屬性|值
1 |用戶名| Marius
1 |密碼| Fubar
我想創建一個輸出:
1 | Marius | Fubar
也許我太累了,看不出來,聽起來不太複雜,但我似乎無法弄清楚。任何幫助表示讚賞。
具有類似於將多個SQL字段組合成1個輸出行
的SQL表用戶標識|屬性|值
1 |用戶名| Marius
1 |密碼| Fubar
我想創建一個輸出:
1 | Marius | Fubar
也許我太累了,看不出來,聽起來不太複雜,但我似乎無法弄清楚。任何幫助表示讚賞。
爲什麼不使用自連接,即。 :
select u1.userid, u1.value, u2.value
from yourtable u1
inner join yourtable u2 on u2.userid=u1.userid
where u1.attribute='Username' and u2.attribute='Password';
編輯:
每個結果一列:
如果您嘗試將多個屬性使用相同的用戶名結合起來會是這樣的:
短查詢(一個用戶名):
declare @concattedtext varchar(1000)
SELECT @concattedtext=coalesce(@concattedtext + '|', '') + Value
FROM #users WHERE UserID=1
SELECT @concattedtext
結果和您的示例數據:
1 | Marius | Fubar
全面查詢(所有用戶名的)
-- Your source table
CREATE Table #users (UserID int, Attribute varchar(50), Value varchar(50))
-- some entries
INSERT into #users (UserID, Attribute, Value)
VALUES (1, 'Test1', 'attr1')
INSERT into #users (UserID, Attribute, Value)
VALUES (1, 'Test2', 'attr2')
INSERT into #users (UserID, Attribute, Value)
VALUES (1, 'Test3', 'attr3')
INSERT into #users (UserID, Attribute, Value)
VALUES (2, 'Test4', 'attr4')
-- ids table variable (for distinct UserID's)
DECLARE @ids TABLE
(
rownum int IDENTITY (1, 1) Primary key NOT NULL,
UserID int
)
-- Output table variable
DECLARE @out TABLE
(
rownum int IDENTITY (1, 1) Primary key NOT NULL,
UserID int,
ConcatText varchar(1000)
)
-- get distinct id's
INSERT INTO @ids(UserID)
SELECT DISTINCT(UserID) FROM #users
-- Foreach vars
declare @RowCnt int
declare @MaxRows int
select @RowCnt = 1
select @MaxRows=count(*) from @ids
-- UserID
declare @id int
declare @concattedtext varchar(1000)
-- process each id
while @RowCnt <= @MaxRows
begin
SET @id = 0
SELECT @id=UserID
FROM @ids WHERE [email protected]
SET @concattedtext = CONVERT(nvarchar(50), @id)
FROM @ids WHERE [email protected]
SELECT @concattedtext=coalesce(@concattedtext + '|', '') + Value
FROM #users WHERE [email protected]
INSERT INTO @out(UserID, ConcatText)
VALUES (@id, @concattedtext)
-- next UserID
Select @RowCnt = @RowCnt + 1
end
SELECT * FROM @out
DROP TABLE #users
結果:
rownum|UserID|ConcatTex
1 | 1 |1|attr1|attr2|attr3
2 | 2 |2|attr4
DROP TABLE #users
您可能需要一個排序字段,以獲得您所要求的順序您的參數。
多列
數據需求,如果你想獲得一個表的多個列有屬性的相等計數。你仍然需要關心訂購。
在這種情況下,您可以選擇使用硬編碼查詢。
對不起,這些下拉列表只是爲了分隔列。我的問題是,我想從兩行或更多行的字段返回一行 – Marius 2010-08-16 14:53:08
但是,這是你需要做的 - 只要交換下行任何你想要的。你以前沒有提到這個事實。 – 2010-08-16 14:58:46
所以 - 你需要得到一個兩列表或一個多列表?第二個是很難的。你需要做多個查詢來完成。例如。 sql while和UserId分組。請編輯您的問題以反映這些細節。 – 2010-08-16 17:23:39
會像...
SELECT userID,
GROUP_CONCAT (Value SEPARATOR '|')
FROM my_table
GROUP BY UserID;
是你在找什麼?
如果以這種方式保存數據,則需要執行交叉表查詢並將行轉換爲列。如果您使用的是Microsoft SQL Server,請在Books Online中查看「crosstab query」和pivot操作符。
在我的情況下非常短暫和工作的解決方案,非常感謝! – Marius 2010-08-17 09:19:26