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分组