Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这个查询有什么问题?为什么我会出现这个错误?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 这个查询有什么问题?为什么我会出现这个错误?

Sql 这个查询有什么问题?为什么我会出现这个错误?,sql,sql-server,tsql,Sql,Sql Server,Tsql,列“cte.Amount”在ORDER BY子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。您不能UNION ALL像这样的TOP语句,您可以将它们放在单独的公共表表达式中,然后UNION ALL这些语句中 因此,类似这样的情况,尽管您可能需要将UNION ALL包装到另一个CTE中,以便能够进一步执行另一个TOP 5 with cte as( Select Top 5 MenuItemName AS Name, Sum(Quantity) A

列“cte.Amount”在ORDER BY子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

您不能
UNION ALL
像这样的
TOP
语句,您可以将它们放在单独的
公共表表达式中,然后
UNION ALL
这些语句中

因此,类似这样的情况,尽管您可能需要将
UNION ALL
包装到另一个
CTE
中,以便能够进一步执行另一个
TOP 5

 with cte as(
            Select Top 5 MenuItemName AS Name, Sum(Quantity) AS Quantity ,
            Sum(Price) AS Amount
            FROM [sTMS 3].dbo.Orders
            INNER JOIN [sTMS 3].dbo.MenuItems ON [sTMS 3].dbo.Orders.MenuItemId = [sTMS 3].dbo.MenuItems.Id
            INNER JOIN [sTMS 3].dbo.Tickets TCK ON TCK.Id = [sTMS 3].dbo.Orders.TicketId
            INNER JOIN [sTMS 3].dbo.TicketEntities TEN ON TEN.Ticket_Id = TCK.Id
            WHERE 
            (MenuItems.GroupCode = 'Rides' OR MenuItems.GroupCode = 'Ticket Rides')
            AND Orders.CreatedDateTime BETWEEN Convert(DATETIME,'Jan  1 2017 12:00AM',101) and Convert(DATETIME,'Mar  3 2017 12:00AM',101)
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
            Group by MenuItemName
            Order by Amount Desc  UNION ALL
            Select Top 5 MenuItemName AS Name, Sum(Quantity) AS Quantity ,
            Sum(Price) AS Amount
            FROM sTMS10.dbo.Orders
            INNER JOIN sTMS10.dbo.MenuItems ON sTMS10.dbo.Orders.MenuItemId = sTMS10.dbo.MenuItems.Id
            INNER JOIN sTMS10.dbo.Tickets TCK ON TCK.Id = sTMS10.dbo.Orders.TicketId
            INNER JOIN sTMS10.dbo.TicketEntities TEN ON TEN.Ticket_Id = TCK.Id
            WHERE 
            (MenuItems.GroupCode = 'Rides' OR MenuItems.GroupCode = 'Ticket Rides')
            AND Orders.CreatedDateTime BETWEEN Convert(DATETIME,'Jan  1 2017 12:00AM',101) and Convert(DATETIME,'Mar  3 2017 12:00AM',101)
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
            AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
            Group by MenuItemName
            Order by Amount Desc)
            Select top 5 Name,Sum(Quantity) AS Quantity,Sum(Amount)/``
            (Select SUM(Amount) FROM (Select top 5 Sum(e.Amount) Amount From cte e Group by e.Name order by e.Amount desc)a) * 100 AS Percentage,Sum(Amount) AS Amount 
            ,CONVERT(DATETIME,'Jan  1 2017 12:00AM',101) FromDate
            ,CONVERT(DATETIME,'Mar  3 2017 12:00AM',101) ToDate     
            From cte Group by Name order by Amount desc

但是,最好从您的
CTE
中删除
TOP5
限制,只需执行
UNION ALL
,然后在外部查询中执行
TOP5

您只需按
e.Amount
排序,而不是最后一行第四行的聚合列
SUM(Amount)Amount

WITH FirstTop5 AS
(
SELECT TOP 5
        MenuItemName AS Name
    ,   SUM(Quantity) AS Quantity
    ,   SUM(Price) AS Amount
    FROM [sTMS 3].dbo.Orders
    INNER JOIN [sTMS 3].dbo.MenuItems
        ON [sTMS 3].dbo.Orders.MenuItemId = [sTMS 3].dbo.MenuItems.id
    INNER JOIN [sTMS 3].dbo.Tickets TCK
        ON TCK.id = [sTMS 3].dbo.Orders.TicketId
    INNER JOIN [sTMS 3].dbo.TicketEntities TEN
        ON TEN.Ticket_Id = TCK.id
    WHERE (MenuItems.GroupCode = 'Rides'
    OR MenuItems.GroupCode = 'Ticket Rides')
    AND Orders.CreatedDateTime BETWEEN CONVERT(DATETIME, 'Jan  1 2017 12:00AM', 101) AND CONVERT(DATETIME, 'Mar  3 2017 12:00AM', 101)
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
    GROUP BY MenuItemName
    ORDER BY Amount DESC
)
, SecondTop5 AS
(
    SELECT TOP 5
        MenuItemName AS Name
    ,   SUM(Quantity) AS Quantity
    ,   SUM(Price) AS Amount
    FROM sTMS10.dbo.Orders
    INNER JOIN sTMS10.dbo.MenuItems
        ON sTMS10.dbo.Orders.MenuItemId = sTMS10.dbo.MenuItems.id
    INNER JOIN sTMS10.dbo.Tickets TCK
        ON TCK.id = sTMS10.dbo.Orders.TicketId
    INNER JOIN sTMS10.dbo.TicketEntities TEN
        ON TEN.Ticket_Id = TCK.id
    WHERE (MenuItems.GroupCode = 'Rides'
    OR MenuItems.GroupCode = 'Ticket Rides')
    AND Orders.CreatedDateTime BETWEEN CONVERT(DATETIME, 'Jan  1 2017 12:00AM', 101) AND CONVERT(DATETIME, 'Mar  3 2017 12:00AM', 101)
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
    AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
    GROUP BY MenuItemName
    ORDER BY Amount DESC
)

SELECT * FROM FirstTop5
UNION ALL
SELECT * FROM SecondTop5

是的,你指对了,但这有什么不对?
with cte as(
        Select Top 5 MenuItemName AS Name, Sum(Quantity) AS Quantity ,
        Sum(Price) AS Amount
        FROM [sTMS 3].dbo.Orders
        INNER JOIN [sTMS 3].dbo.MenuItems ON [sTMS 3].dbo.Orders.MenuItemId = [sTMS 3].dbo.MenuItems.Id
        INNER JOIN [sTMS 3].dbo.Tickets TCK ON TCK.Id = [sTMS 3].dbo.Orders.TicketId
        INNER JOIN [sTMS 3].dbo.TicketEntities TEN ON TEN.Ticket_Id = TCK.Id
        WHERE 
        (MenuItems.GroupCode = 'Rides' OR MenuItems.GroupCode = 'Ticket Rides')
        AND Orders.CreatedDateTime BETWEEN Convert(DATETIME,'Jan  1 2017 12:00AM',101) and Convert(DATETIME,'Mar  3 2017 12:00AM',101)
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
        Group by MenuItemName
        Order by Amount Desc  UNION ALL
        Select Top 5 MenuItemName AS Name, Sum(Quantity) AS Quantity ,
        Sum(Price) AS Amount
        FROM sTMS10.dbo.Orders
        INNER JOIN sTMS10.dbo.MenuItems ON sTMS10.dbo.Orders.MenuItemId = sTMS10.dbo.MenuItems.Id
        INNER JOIN sTMS10.dbo.Tickets TCK ON TCK.Id = sTMS10.dbo.Orders.TicketId
        INNER JOIN sTMS10.dbo.TicketEntities TEN ON TEN.Ticket_Id = TCK.Id
        WHERE 
        (MenuItems.GroupCode = 'Rides' OR MenuItems.GroupCode = 'Ticket Rides')
        AND Orders.CreatedDateTime BETWEEN Convert(DATETIME,'Jan  1 2017 12:00AM',101) and Convert(DATETIME,'Mar  3 2017 12:00AM',101)
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Master Card"}%'
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Technical Card"}%'
        AND TEN.EntityCustomData NOT LIKE '%{"Name":"Card Type","Value":"Guest Card"}%'
        Group by MenuItemName
        Order by Amount Desc)
        Select top 5 Name,Sum(Quantity) AS Quantity,Sum(Amount)/``
        (Select SUM(Amount) FROM (Select top 5 Sum(e.Amount) Amount From cte e Group by e.Name order by Amount desc)a) * 100 AS Percentage,Sum(Amount) AS Amount 
        ,CONVERT(DATETIME,'Jan  1 2017 12:00AM',101) FromDate
        ,CONVERT(DATETIME,'Mar  3 2017 12:00AM',101) ToDate     
        From cte Group by Name order by Amount desc