Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
MSSQL查询问题-将别名按查询的一部分分组_Sql_Sql Server_Sql Server 2012_Group By_Alias - Fatal编程技术网

MSSQL查询问题-将别名按查询的一部分分组

MSSQL查询问题-将别名按查询的一部分分组,sql,sql-server,sql-server-2012,group-by,alias,Sql,Sql Server,Sql Server 2012,Group By,Alias,我有一个查询,基本上如下所示: SELECT COUNT(*) OVER () AS TotalRowsFound, t.Title , t.ItemID , t.UploadDate , t.SevenDaySales as SelectedColumnSales , t.QuantitySold , t.CurrentPrice , t.CurrentPrice as L

我有一个查询,基本上如下所示:

SELECT 
    COUNT(*) OVER () AS TotalRowsFound,
        t.Title
        , t.ItemID
        , t.UploadDate
        , t.SevenDaySales as SelectedColumnSales
        , t.QuantitySold
        , t.CurrentPrice
        , t.CurrentPrice as LastSalePrice

FROM 
        dbo.SearchedUserItems t
WHERE 
        T.SearchedUserID = 5   
GROUP BY 
        t.ItemID,t.UploadDate,t.SelectedColumnSales,t.QuantitySold,t.CurrentPrice,LastSalePrice
ORDER BY SelectedColumnSales  DESC
OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY;
问题是我无法完成查询,因为它说SelectedColumnSales和LastSalePrice列不存在

这方面有什么解决办法吗?=/

如何完成此查询,使其实际工作并使用GROUPBY语句中的别名,或者以其他方式


有人能帮我吗?

我不明白为什么在聚合查询中使用这样的窗口函数。执行所需操作的一种方法是使用
apply

SELECT      . . . 
FROM        dbo.searcheduseritems sui 
CROSS apply (VALUES 
            ( 
                        sevendaysales, 
                        currentprice 
            ) 
            ) v(selectedcolumnsales, lastsaleprice) 
WHERE       sui.searcheduserid = 5 
GROUP BY    sui.itemid, 
            sui.uploaddate, 
            v.selectedcolumnsales, 
            sui.quantitysold, 
            sui.currentprice, 
            v.lastsaleprice 
ORDER BY    v.selectedcolumnsales DESC offset + 55*0 rowsFETCH next 55 rows only

这个查询对我来说没有意义(因为它很有用),但这将允许您做您想做的事情。

我不明白您为什么在聚合查询中使用这样的窗口函数。执行所需操作的一种方法是使用
apply

SELECT      . . . 
FROM        dbo.searcheduseritems sui 
CROSS apply (VALUES 
            ( 
                        sevendaysales, 
                        currentprice 
            ) 
            ) v(selectedcolumnsales, lastsaleprice) 
WHERE       sui.searcheduserid = 5 
GROUP BY    sui.itemid, 
            sui.uploaddate, 
            v.selectedcolumnsales, 
            sui.quantitysold, 
            sui.currentprice, 
            v.lastsaleprice 
ORDER BY    v.selectedcolumnsales DESC offset + 55*0 rowsFETCH next 55 rows only

该查询对我来说没有意义(因为它很有用),但这将允许您做您想做的事情。

由于SQL Server处理查询的方式,您不能在GROUP by子句中使用别名

SQL Server将从FROM子句开始处理您的查询。 在您的情况下,处理将移动到何处,然后按分组,然后再移动到选择

因此,根据定义,您的别名选择了ColumnSales 还不存在

您需要根据定义使用组中的实际列名,不能使用列别名


在GROUP BY中将SelectColumnSales替换为t.SevenDaySales,将LastSalePrice替换为t.CurrentPrice

由于SQL Server处理查询的方式,您不能在GROUP BY子句中使用别名

SQL Server将从FROM子句开始处理您的查询。 在您的情况下,处理将移动到何处,然后按分组,然后再移动到选择

因此,根据定义,您的别名选择了ColumnSales 还不存在

您需要根据定义使用组中的实际列名,不能使用列别名


将组中的SelectColumnSales替换为t.SevenDaySales,LastSalePrice替换为t.CurrentPrice,这是一个简单的修复方法。您不能在
分组依据
中使用
别名
名称。请改用源列名:

SELECT 
    COUNT(*) OVER () AS TotalRowsFound,
        t.Title
        , t.ItemID
        , t.UploadDate
        , t.SevenDaySales as SelectedColumnSales
        , t.QuantitySold
        , t.CurrentPrice
        , t.CurrentPrice as LastSalePrice

FROM 
        dbo.SearchedUserItems t
WHERE 
        T.SearchedUserID = 5   
GROUP BY 
        t.ItemID,t.UploadDate,t.SevenDaySales,t.QuantitySold,t.CurrentPrice
ORDER BY SelectedColumnSales  DESC
OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY;

这是一个简单的解决方案。您不能在
分组依据
中使用
别名
名称。请改用源列名:

SELECT 
    COUNT(*) OVER () AS TotalRowsFound,
        t.Title
        , t.ItemID
        , t.UploadDate
        , t.SevenDaySales as SelectedColumnSales
        , t.QuantitySold
        , t.CurrentPrice
        , t.CurrentPrice as LastSalePrice

FROM 
        dbo.SearchedUserItems t
WHERE 
        T.SearchedUserID = 5   
GROUP BY 
        t.ItemID,t.UploadDate,t.SevenDaySales,t.QuantitySold,t.CurrentPrice
ORDER BY SelectedColumnSales  DESC
OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY;

将原始查询包装到派生表(子查询)中,然后您可以使用
组BY
中的列别名:

SELECT
     COUNT(*) OVER () AS TotalRowsFound,
     dt.*
FROM
(
    SELECT 
            t.Title
            , t.ItemID
            , t.UploadDate
            , t.SevenDaySales as SelectedColumnSales
            , t.QuantitySold
            , t.CurrentPrice
            , t.CurrentPrice as LastSalePrice
    FROM 
            dbo.SearchedUserItems t
    WHERE 
            T.SearchedUserID = 5   
) dt
GROUP BY ItemID, UploadDate, SelectedColumnSales, QuantitySold, CurrentPrice, LastSalePrice
ORDER BY SelectedColumnSales  DESC
OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY;

将原始查询包装到派生表(子查询)中,然后您可以使用
组BY
中的列别名:

SELECT
     COUNT(*) OVER () AS TotalRowsFound,
     dt.*
FROM
(
    SELECT 
            t.Title
            , t.ItemID
            , t.UploadDate
            , t.SevenDaySales as SelectedColumnSales
            , t.QuantitySold
            , t.CurrentPrice
            , t.CurrentPrice as LastSalePrice
    FROM 
            dbo.SearchedUserItems t
    WHERE 
            T.SearchedUserID = 5   
) dt
GROUP BY ItemID, UploadDate, SelectedColumnSales, QuantitySold, CurrentPrice, LastSalePrice
ORDER BY SelectedColumnSales  DESC
OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY;

您在GROUP BY子句中混淆了列名和列别名。您需要在GROUP BY中直接使用t.SevenDaySales Swap SelectColumnSales for t.SevenDaySales在GROUP BY子句中混淆了列名和列别名。您需要在GROUP BY中直接使用t.SevenDaySales Swap SelectColumnSales for t.SevenDaySales for t.SevenDaySales分组