Dans SQL Server, ci-dessous requête vous donne la puissance requise
DECLARE @SAMPLEDATA TABLE(ID VARCHAR(100), NLV DATETIME, SGLV DECIMAL(18,1))
INSERT INTO @SAMPLEDATA VALUES
('m0001', '03/27/2017', 8),
('m0001', '03/28/2017', 3.5),
('m0002', '03/28/2017', 8),
('m0003', '03/26/2017', 12),
('M0001', '03/27/2017', 2)
SELECT ID,ISNULL([03/26/2017],0)[03/26/2017],ISNULL([03/27/2017],0) [03/27/2017],ISNULL([03/28/2017],0)[03/28/2017] FROM
(
SELECT ID,NLV,SGLV FROM @SAMPLEDATA
)T
PIVOT
(
SUM(SGLV) FOR NLV IN([03/26/2017],[03/27/2017],[03/28/2017])
)PIV;
sortie
------------------------------------------
--ID 03/26/2017 03/27/2017 03/28/2017
------------------------------------------
m0001 0.0 10.0 3.5
m0002 0.0 0.0 8.0
m0003 12.0 0.0 0.0
------------------------------------------
UTILISATION QUERY DYNAMIQUE: Comme mentionné dans les commentaires, si la sortie doit être générée pour le mois complet en cours, la même chose peut être obtenue en utilisant la requête dynamique plutôt que d'écrire CASE pour chaque jour du mois. Essayez la requête ci-dessous:
DECLARE @DYNAMICQUERY NVARCHAR(MAX)=''
DECLARE @DATERANGE VARCHAR(MAX)=''
;WITH COMPLETEMONTH (COL)
AS
(
SELECT CAST(CAST(MONTH(CURRENT_TIMESTAMP) AS VARCHAR(2))+'/'+'01/'+CAST(YEAR(CURRENT_TIMESTAMP) AS VARCHAR(4)) AS DATETIME)
UNION ALL
SELECT DATEADD(D,1,COL)COL FROM COMPLETEMONTH
WHERE COL< DATEADD(D,-1, (DATEADD(M,1,CAST(CAST(MONTH(CURRENT_TIMESTAMP) AS VARCHAR(2))+'/'+'01/'+CAST(YEAR(CURRENT_TIMESTAMP) AS VARCHAR(4)) AS DATETIME))))
)
SELECT @[email protected]+'['+CONVERT(VARCHAR,COL,101)+']'+',' FROM COMPLETEMONTH
SET @DATERANGE=LEFT(@DATERANGE,LEN(@DATERANGE)-1)
SELECT @DYNAMICQUERY=
'SELECT ID,'[email protected]+' FROM
(
SELECT ''m0001'' ID , ''03/27/2017'' NLV, 8 SGLV
UNION ALL
SELECT ''m0001'', ''03/28/2017'', 3.5
UNION ALL
SELECT ''m0002'', ''03/28/2017'', 8
UNION ALL
SELECT ''m0003'', ''03/26/2017'', 12
UNION ALL
SELECT ''M0001'', ''03/27/2017'', 2
)T
PIVOT
(
SUM(SGLV) FOR NLV IN('[email protected]+')
)PIV;'
EXEC SP_EXECUTESQL @DYNAMICQUERY,N'@DATERANGE VARCHAR(MAX)',@[email protected]
SQL Server ou MySQL ?? Assurez-vous d'avoir marqué le SGBDR correct. –
Vos données n'ont que 3 jours (26, 27, 28) ou plus? – TriV
@TriV c'est un exemple. Les données comprennent plusieurs lignes – user1465351