2017-01-13 3 views
0

Ich versuche Datum in diesem format dd/MMM/yyyySyntax in der Nähe in Pivot-SQL

zu bekommen, so habe ich die folgende Abfrage

select REPLACE(CONVERT(NVARCHAR,GETDATE(), 106), ' ', '/') 

aber wenn ich versuchte, es es unter Abfrage anzuwenden auf bekam ich diesen Fehler msg .

Fehler: Msg 102, Ebene 15, Status 1, Zeile 13 falsche Syntax in der Nähe ''.

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(Name) 
         from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 

        group by Name 
        order by Name 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT CONVERT(NVARCHAR, SalesDate, 106, ' ', '/') AS [Sales Date],' + @cols + ' from 
      (
    select SalesDate, Restaurants.Name, GrossSales 
    from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 
    WHERE MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017 
      ) x 
      pivot 
      (
       sum(GrossSales) 
       for Name in (' + @cols + ') 
      ) p ' 

execute(@query); 
+0

Das Problem sind die verschachtelte Apostrophe – Jens

+0

CONVERT SELECT (NVARCHAR, Salesdate, 106, '' '', ''/'') – Chanukya

+0

Chanukya noch immer Fehler – Ayman

Antwort

0

Sie vergessen haben, REPLACE

REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') 

möchte hinzufügen sein:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(Name) 
         from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 

        group by Name 
        order by Name 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') AS [Sales Date],' + @cols + ' from 
      (
    select SalesDate, Restaurants.Name, GrossSales 
    from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 
    WHERE MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017 
      ) x 
      pivot 
      (
       sum(GrossSales) 
       for Name in (' + @cols + ') 
      ) p ' 

execute(@query); 
2

Sie die einfachen Anführungszeichen auf Ihre dynamische Abfrage fehlt und die REPLACE Funktion

DECLARE 
    @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Name) 
         FROM dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 
        group by Name 
        order by Name 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SET @query = 'SELECT 
    REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') AS [Sales Date], 
    ' + @cols + ' 
    FROM 
    (
     SELECT 
      SalesDate, 
      Restaurants.Name, 
      GrossSales 
     FROM 
      dbo.DailySales 
     INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID 
     WHERE 
      MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017 
    ) x 
    pivot 
    (
     SUM(GrossSales) 
     FOR Name IN (' + @cols + ') 
    ) p ' 

EXECUTE(@query); 
+0

Msg 102, Ebene 15, Status 1, Zeile 1 falsche Syntax in der Nähe von ','. Msg 102, Ebene 15, Status 1, Zeile 6 Falsche Syntax in der Nähe von 'x'. – Ayman

Verwandte Themen