0
아래 이미지에서 설명한대로 출력을 얻으려면 몇 가지 테이블을 병합하려고합니다.SQL 병합 테이블
내 문제는 내가
사람이 구문을 도와 주실 것을 달성하기 위해 사용하는 조인의 종류 모르겠습니다이다.
아래 이미지에서 설명한대로 출력을 얻으려면 몇 가지 테이블을 병합하려고합니다.SQL 병합 테이블
내 문제는 내가
사람이 구문을 도와 주실 것을 달성하기 위해 사용하는 조인의 종류 모르겠습니다이다.
사용자가 추가/삭제할 수있는 동적 피벗입니다.
CREATE TABLE #Tests (
Test_ID INT,
TestName VARCHAR(50));
INSERT INTO #Tests VALUES (1, 'SQL Test');
INSERT INTO #Tests VALUES (2, 'C# Test');
INSERT INTO #Tests VALUES (3, 'Java Test');
CREATE TABLE #Users (
[User_ID] INT,
UserName VARCHAR(50));
INSERT INTO #Users VALUES (1, 'Joe');
INSERT INTO #Users VALUES (2, 'Jack');
INSERT INTO #Users VALUES (3, 'Jane');
CREATE TABLE #UserTests (
ID INT,
[User_ID] INT,
Test_ID INT,
Completed INT);
INSERT INTO #UserTests VALUES (1, 1, 1, 0);
INSERT INTO #UserTests VALUES (2, 1, 2, 1);
INSERT INTO #UserTests VALUES (3, 1, 3, 1);
INSERT INTO #UserTests VALUES (4, 2, 1, 0);
INSERT INTO #UserTests VALUES (5, 2, 2, 0);
INSERT INTO #UserTests VALUES (6, 2, 3, 0);
INSERT INTO #UserTests VALUES (7, 3, 1, 1);
INSERT INTO #UserTests VALUES (8, 3, 2, 1);
INSERT INTO #UserTests VALUES (9, 3, 3, 1);
DECLARE @Cols VARCHAR(MAX);
SELECT @Cols = STUFF((SELECT distinct ',' + QUOTENAME(u.UserName)
FROM #Users u
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
DECLARE @Query NVARCHAR(MAX);
SELECT @Query = 'SELECT TestName, ' + @Cols + ' FROM
(
SELECT
t.TestName,
u.UserName,
ut.Completed
FROM
#Tests t
INNER JOIN #UserTests ut ON ut.Test_ID = t.Test_ID
INNER JOIN #Users u ON u.[User_ID] = ut.[User_ID]) x
PIVOT (
MAX(Completed)
FOR UserName IN (' + @Cols + ')
) AS pt';
EXEC(@Query);
결과는 다음과 같습니다
TestName Jack Jane Joe
C# Test 0 1 1
Java Test 0 1 1
SQL Test 0 1 0
(동일 당신과 같은 결과를하지만, 다른 정렬 순서에.)
예 사용자를 추가/삭제할 수 있습니다. 나는 위의 것을 시도 할 것이다. 감사 –
당신은 ['PIVOT'] (HTTP를 사용해야 할 수도 있습니다 : // www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query) – valverij
얼마나 많은 테스트 대 얼마나 많은 사용자가 논리적으로 당신이 출력의 행과 열을 바꾸고 싶어한다고 생각하십니까? . 이 보고서를 출력하기 위해 당신은 무엇을 사용하고 있습니까? –
질문에 대한 데이터를 사용 가능한 형식으로 게시하십시오. 이상적으로, F5- 준비'create table'과'insert' 문. 지금 나는 단지 'PIVOT'과'FULL OUTER JOIN'에 대한 힌트를 줄 것입니다. –