這是我的查詢。此查詢導致20-30秒,並在我的應用程序中導致超時錯誤。我試圖用條款重新寫,但我不能讓它運行。如何快速從子表中選擇2000萬行數據的子查詢
對不起,我英文很差。
SELECT
StationName, StationID,
(SELECT TOP (1) ISNULL(SUM(Liter), 0) AS TotalLiter
FROM Transactions (nolock)
WHERE (StationID = s.StationID)
AND (SaleDate>= CONVERT(date, GETDATE()))
AND (FuelTypeID = 1)) AS Total1,
(SELECT TOP (1) ISNULL(SUM(Liter), 0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_11
WHERE (StationID = s.StationID)
AND (SaleDate >= CONVERT(date, GETDATE()))
AND (FuelTypeID = 2)) AS Total2,
(SELECT TOP (1) ISNULL(SUM(Liter), 0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_10
WHERE (StationID = s.StationID)
AND (SaleDate >= CONVERT(date, GETDATE()))
AND (FuelTypeID = 3)) AS Total3,
(SELECT TOP (1) ISNULL(SUM(Liter), 0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_9
WHERE (StationID = s.StationID)
AND (SaleDate >= CONVERT(date, GETDATE()))
AND (FuelTypeID = 4)) AS Total4,
(SELECT TOP (1) ISNULL(SUM(Liter), 0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_8
WHERE (StationID = s.StationID)
AND (SaleDate >= CONVERT(date, GETDATE()))
AND (FuelTypeID = 5)) AS Total5,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_7
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE())) AND (FuelTypeID = 6)) AS Total6,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_6
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE())) AND (FuelTypeID = 7)) AS Total7,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_5
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE())) AND (FuelTypeID = 8)) AS Total8,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_4
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE())) AND (FuelTypeID = 9)) AS Total9,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_3
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE())) AND (FuelTypeID = 10)) AS Total10,
(SELECT TOP (1) ISNULL(SUM(Liter),0) AS TotalLiter
FROM dbo.Transactions (nolock) AS Transactions_2
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE()))) AS GrandTotal,
(SELECT TOP (1) MAX(SaleDate) AS LastSaleDate
FROM dbo.Transactions (nolock) AS Transactions_1
WHERE (StationID = s.StationID) AND (SaleDate >= CONVERT(date, GETDATE()))
ORDER BY LastSaleDate) AS LastSaleDate
FROM
dbo.Stations (nolock) AS s
WHERE
s.StationCode BETWEEN 1000 AND 1100
ORDER BY
StationID
添加表結構,樣本da ta和預期結果 – Backs