拥有类似
的SQL表 UserID |属性|值
1 |用户名|马吕斯
1 |密码| FUBAR
我想创建一个输出:
1 |马吕斯| FUBAR
也许我太累了,看不出来,听起来不太复杂,但我似乎无法弄明白。任何帮助表示赞赏。
答案 0 :(得分:3)
为什么不使用自联接,即。 :
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';
答案 1 :(得分:1)
会是什么......
SELECT userID,
GROUP_CONCAT (Value SEPARATOR '|')
FROM my_table
GROUP BY UserID;
是你在寻找什么?
答案 2 :(得分:0)
编辑:
每个结果一列:
如果您尝试将多个属性与相同的UserID组合,则可能是这样的:
简短查询(一个UserID):
declare @concattedtext varchar(1000)
SELECT @concattedtext=coalesce(@concattedtext + '|', '') + Value
FROM #users WHERE UserID=1
SELECT @concattedtext
使用您的示例数据:
1 | Marius | Fubar
完整查询(所有UserID)
-- 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 rownum=@RowCnt
SET @concattedtext = CONVERT(nvarchar(50), @id)
FROM @ids WHERE rownum=@RowCnt
SELECT @concattedtext=coalesce(@concattedtext + '|', '') + Value
FROM #users WHERE UserID=@id
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
您可能需要一个排序字段来按要求的顺序获取参数。
多列
如果您希望获得包含多列的表,则您的数据需要具有相同的属性数。而你仍然需要注意订购。
在这种情况下,您可以选择带分组的硬编码查询。
答案 3 :(得分:0)
如果以这种方式保存数据,则需要执行交叉表查询并将行转移到列中。如果您使用的是Microsoft SQL Server,请在联机丛书中查看“交叉表查询”和数据透视运算符。