Vous pourriez faire quelque chose comme ceci, c'est un pivot dynamique comme vous pourriez ajouter/emporter des utilisateurs?
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);
Les résultats sont:
TestName Jack Jane Joe
C# Test 0 1 1
Java Test 0 1 1
SQL Test 0 1 0
(Mêmes résultats que la vôtre, mais dans un ordre de tri.)
Vous pourriez avoir besoin d'utiliser un [ 'PIVOT'] (http: // www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query) – valverij
combien de tests vs combien d'utilisateurs, logiquement j'imagine que vous voulez changer les lignes et les colonnes de votre sortie . Que utilisez-vous pour produire ce rapport? –
S'il vous plaît, postez les données pour votre question dans un format utilisable. Idéalement, les instructions 'create table' et' insert' sont prêtes pour F5. Pour l'instant, je vais seulement vous donner un indice: 'PIVOT' et' FULL OUTER JOIN'. –