[英]MSSQL query issue - putting alias name in GROUP BY part of the query
我有一個查詢,基本上看起來像這樣:
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不存在...
有什么解決方法嗎? = /
我如何才能完成此查詢,以使其真正起作用並使用group by語句中的別名或其他方式?
有人可以幫我嗎 ?
由於SQL Server處理查詢的方式,您不能在GROUP BY子句中使用別名。
SQL Server將從FROM子句開始處理您的查詢。 在您的情況下,處理將移至WHERE,然后移至GROUP BY,然后移至SELECT。
因此,根據定義,您的別名SelectedColumnSales不存在。
您需要按定義使用組中的實際列名,而不能使用列別名。
在GROUP BY中將SelectColumnSales替換為t.SevenDaySales,將LastSalePrice替換為t.CurrentPrice。
我不明白為什么您在聚合查詢中使用像這樣的窗口函數。 一種執行所需用途的方法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
該查詢對我來說沒有任何意義(因為它很有用),但這將使您可以做自己想做的事情。
這是一個簡單的修復。 您不能在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 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;
將原始查詢包裝在派生表(子查詢)中,然后可以在GROUP 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.