과 같은 SQL 테이블이 있습니다. 값
1 | 사용자 이름 | 마리우스
1 | Fubar
출력을 다음과 같이 만들고 싶습니다.
1 | 마리우스 | Fubar
어쩌면 나는 그것을보기에는 너무 피곤할 수도 있고, 너무 복잡해 보이지 않을 수도 있지만, 나는 그것을 알아낼 수없는 것 같습니다. 어떤 도움을 주셔서 감사합니다.
과 같은 SQL 테이블이 있습니다. 값
1 | 사용자 이름 | 마리우스
1 | Fubar
출력을 다음과 같이 만들고 싶습니다.
1 | 마리우스 | 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';
편집 : 결과 당
한 열 : 동일한 사용자 ID로 여러 속성을 결합하려고하면
가이 같은 것입니다 :
짧은 쿼리 (한 아이디) : 귀하의 예제 데이터를
declare @concattedtext varchar(1000)
SELECT @concattedtext=coalesce(@concattedtext + '|', '') + Value
FROM #users WHERE UserID=1
SELECT @concattedtext
결과 :
1 | Marius | Fubar
전체 쿼리 (모든 사용자 ID의)
-- 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
하지만이 작업을 수행해야합니다. 원하는 것은 무엇이든 다운 슬래시를 교환하십시오. 전에는이 사실을 언급하지 않았습니다. –
그래서 2 열 테이블 또는 다중 열 테이블을 가져와야합니까? 두 번째 것은 어렵습니다. 이를 수행하려면 여러 쿼리를 수행해야합니다. E.G. sql while 및 UserId로 그룹화됩니다.이 세부 정보를 반영하도록 질문을 편집하십시오. –
겠습니까 뭔가 같은 ...
SELECT userID,
GROUP_CONCAT (Value SEPARATOR '|')
FROM my_table
GROUP BY UserID;
당신이 찾고있는 무슨 일?
데이터를 그대로 유지하면 크로스 탭 쿼리를 수행하고 행을 열로 피벗해야합니다. Microsoft SQL Server를 사용하는 경우 "크로스 탭 쿼리"와 온라인 설명서의 피벗 연산자를 확인하십시오.
내 시나리오에서 매우 짧고 효과적인 해결책, 대단히 감사합니다! – Marius