次のようなストアド プロシージャがあります。
ALTER PROCEDURE [dbo].[ParkingSummary]
@locid INTEGER,
@startdate NVARCHAR(100),
@enddate NVARCHAR(100)
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX)
,@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((
SELECT DISTINCT ',' + QUOTENAME(Vtype)
FROM VType_tbl
FOR XML PATH (''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT ' + @cols + ' from
( select Vtype from Transaction_tbl t inner join VType_tbl v on t.vtid = v.vtid
where dtime between ''' + @startdate + ''' and ''' + @enddate + ''' and locid = ' +
CAST(@locid AS VARCHAR(MAX)) + ' and Status >= 5 ) d
pivot ( count(Vtype) for Vtype in (' + @cols + ') ) p '
EXECUTE (@query)
END
私の出力は次のようになっています:
Emaar Staff Lost Ticket Normal VIP VVIP
----------- ----------- ----------- ----------- -----------
0 0 455 0 0
0 0 2537 1831 0
テーブル名の場所がもう1つあります。場所も表示したいので、場所の名前を取得するために、このようにクエリを書き直します
ALTER PROCEDURE [dbo].[ParkingSummary]
@locid INTEGER,
@startdate NVARCHAR(100),
@enddate NVARCHAR(100)
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX)
,@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((
SELECT DISTINCT ',' + QUOTENAME(Vtype)
FROM VType_tbl
FOR XML PATH (''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT LocName ' + @cols + ' from
( select l.LocName, Vtype from Transaction_tbl t inner join VType_tbl v on t.vtid = v.vtid
join dbo.Location_tbl l on t.locid=l.Locid
where dtime between ''' + @startdate + ''' and ''' + @enddate + ''' and Status >= 5 ) d
pivot ( count(Vtype) for Vtype in (' + @cols + ') ) p '
EXECUTE (@query)
END
だから私のアウトは次のようになります:
Emaar Staff Lost Ticket Normal VIP VVIP
----------- ----------- ----------- ----------- -----------
AddressHotel 0 455 0 0
Fashionavenu 0 2537 1831 0
emaarstaff の結果を置き換える私の場所の名前。
Location1name Emaar Staff Lost Ticket Normal VIP VVIP
----------- ----------- ----------- ----------- --------------------------
AddressHotel 0 455 0 0 10
Fashionavenu 0 2537 1831 0 10