Ich habe zwei Tabellen und ich habe das gewünschte Ergebnis von CTE und unmittelbar nach CTE-Abfrage.PIVOT-Ergebnismenge, die durch eine Abfrage erzeugt wird, die unmittelbar nach CTE
Der einzige Teil, ich bin mir nicht sicher, wie Sie die Ergebnismenge von [Lead_Created_Month] Spalte schwenken. Ich muss wahrscheinlich die Ergebnismenge in eine Unterabfrage verpacken und ihr einen Alias geben, aber nicht genau, wie. Dies ist mein Code, der gut funktioniert, um die gewünschte Ergebnismenge zu erzeugen, aber dann muss diese Ergebnismenge um die Spalte [Lead_Created_Month] gedreht werden.
USE DatabaseName
GO
Create Table #TempSales
(
LeadID_fk int identity (1,1),
[dateCreated] datetime
)
insert into #TempSales
values
(NULL),
(getdate()),
(getdate()),
(NULL),
(getdate()),
(getdate()),
(getdate()),
(NULL),
(getdate()),
('2016-05-24 14:17:41.330'),
('2016-03-24 14:17:41.330'),
('2016-03-22 14:17:41.330'),
('2016-03-21 14:17:41.330'),
('2016-04-24 14:17:41.330'),
(NULL);
Create Table #TempLead
(
LeadID int identity (1,1),
[dateCreated] datetime
)
insert into #TempLead
values
(getdate()),
(getdate()),
(getdate()),
(getdate()),
(getdate()),
(getdate()),
(getdate()),
(getdate()),
(getdate()),
('2016-05-24 14:17:41.330'),
('2016-03-24 14:17:41.330'),
('2016-03-22 14:17:41.330'),
('2016-03-21 14:17:41.330'),
('2016-04-24 14:17:41.330'),
(getdate());
Select * from #TempLead;
Select * from #TempSales
;with cte
as
(Select * from #TempLead)
select count(l.LeadID) as [count of Leads], count(s.LeadID_fk) as [count of Sales],
Cast(datepart(mm,[l].[dateCreated]) as varchar(2))+'/'+
--Cast(datepart(dd,[dateCreated]) as varchar(3))+'/'+
Cast(datepart(yyyy,[l].[dateCreated]) as varchar(5)) as [Lead_Created_Month]
from cte as l
left join #TempSales as s on s.LeadID_fk=l.LeadID
and s.[dateCreated] is not null
group by Cast(datepart(mm,[l].[dateCreated]) as varchar(2))+'/'+
Cast(datepart(yyyy,[l].[dateCreated]) as varchar(5))
Die obige Abfrage gibt die folgende Ausgabe:
Das Endergebnis Satz sollte wie folgt aussehen:
Wie Sie meinen Code sehen können, fehlt Berechnung der Umrechnungsprozentsatz
Also schrieb ich diesen Code, es zu berechnen:
--,Cast((Select count([s].LeadID_fk) from #TempSales as s where [s].[dateCreated] is not null
--/* group by Cast(datepart(mm,[s].[dateCreated]) as varchar(2)) +'/'+ Cast(datepart(yyyy,[s].[dateCreated]) as varchar(5)) */
--)/count([l].LeadID) *100 as nvarchar(10)) + '%' as Conversion
Aber dies bewirkt, dass diese Warnmeldung in SSMS erscheinen, die korrekt ist. Mir ist nur keine bessere Lösung bekannt.
Msg 512, Ebene 16, Status 1, Zeile 1 Unterabfrage gab mehr als 1> Wert. Dies ist nicht erlaubt, wenn die Unterabfrage folgt =,! =, <, < =,>>,> = oder wenn die Unterabfrage als Ausdruck verwendet wird.
Vielen Dank. Nur eine Frage, wie kann ich Cast oder Convert in der Conversion PIVOT Ausgabe verwenden? Dies sind die letzten beiden Zeilen Ihres obigen Codes: pivot (max. (S.konversion) für s.yyyymm in ([201603], [201604], [201605], [201606])) pvt ) t; – enigma6205
Sie können case-Anweisungen hinzufügen, wie \t \t Fall \t \t \t wenn t.srce = 3 dann gegossen (t. [201603] als varchar (max)) + '%' \t \t \t sonst Besetzung (t. [201603 ] als varchar (max)) \t \t \t Ende als [201603] in der Auswahl sofort nach der Cte-Definition –