如何将 MS SQL T-SQL 转换为 MySQL 中的后续
How can I convert MS SQL T-SQL into Subsequent in MySQL
这里我有一个 MS SQL 查询,我想将其转换为 MySQL。我不知道怎么处理。
WITH PartitionData as (
SELECT
TOP 10 PurchaseDate.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER( PARTITION BY PurchaseDate.PurchaseDate ORDER BY ( SELECT NULL ) ) AS RowNumber
FROM tblNutBatches
INNER JOIN PurchaseDate ON PurchaseDate.PurchaseDate BETWEEN tblNutBatches.Introduction_date AND tblNutBatches.expiration_date
WHERE PurchaseDate.PurchaseDate = '2004-05-01'
)
SELECT
date as date,
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]
FROM
(
SELECT
date,
BatchCode,
RowNumber
FROM
PartitionData
)AS DataAfterFilter
PIVOT
(
MAX(BatchCode) FOR RowNumber IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])
) A
OUTPUT IN SQL SERVER
如有任何想法,我们将不胜感激。
您通常会使用条件聚合:
SELECT date,
MAX(CASE WHEN rn = 1 THEN BatchCode end) as BatchCode1,
MAX(CASE WHEN rn = 2 THEN BatchCode end) as BatchCode2,
...
MAX(CASE WHEN rn = 10 THEN BatchCode end) as BatchCode10
FROM (
SELECT
pd.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER(PARTITION BY pd.PurchaseDate ORDER BY BatchCode) AS rn
FROM tblNutBatches nb
INNER JOIN PurchaseDate pd ON pd.PurchaseDate BETWEEN nb.Introduction_date AND nb.expiration_date
WHERE pd.PurchaseDate = '2004-05-01'
) t
WHERE rn <= 10
GROUP BY date
备注:
如果你想要一致的结果,你需要在子查询和 ROW_NUMBER()
中使用 ORDER BY
子句 - 我使用了 BatchCode
在 BatchCode
前面加上它所属的 table 的别名
ROW_NUMBER()
的 PARTITION BY
子句和外部 GROUP BY
子句严格来说不是必需的,因为子查询无论如何都只过滤一个数据;我保留了它们,以防您在某个时候需要删除过滤。因此,我将前 10 个过滤逻辑从子查询移到了外部查询。
这里我有一个 MS SQL 查询,我想将其转换为 MySQL。我不知道怎么处理。
WITH PartitionData as (
SELECT
TOP 10 PurchaseDate.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER( PARTITION BY PurchaseDate.PurchaseDate ORDER BY ( SELECT NULL ) ) AS RowNumber
FROM tblNutBatches
INNER JOIN PurchaseDate ON PurchaseDate.PurchaseDate BETWEEN tblNutBatches.Introduction_date AND tblNutBatches.expiration_date
WHERE PurchaseDate.PurchaseDate = '2004-05-01'
)
SELECT
date as date,
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]
FROM
(
SELECT
date,
BatchCode,
RowNumber
FROM
PartitionData
)AS DataAfterFilter
PIVOT
(
MAX(BatchCode) FOR RowNumber IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])
) A
OUTPUT IN SQL SERVER
如有任何想法,我们将不胜感激。
您通常会使用条件聚合:
SELECT date,
MAX(CASE WHEN rn = 1 THEN BatchCode end) as BatchCode1,
MAX(CASE WHEN rn = 2 THEN BatchCode end) as BatchCode2,
...
MAX(CASE WHEN rn = 10 THEN BatchCode end) as BatchCode10
FROM (
SELECT
pd.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER(PARTITION BY pd.PurchaseDate ORDER BY BatchCode) AS rn
FROM tblNutBatches nb
INNER JOIN PurchaseDate pd ON pd.PurchaseDate BETWEEN nb.Introduction_date AND nb.expiration_date
WHERE pd.PurchaseDate = '2004-05-01'
) t
WHERE rn <= 10
GROUP BY date
备注:
如果你想要一致的结果,你需要在子查询和
ROW_NUMBER()
中使用ORDER BY
子句 - 我使用了BatchCode
在
BatchCode
前面加上它所属的 table 的别名ROW_NUMBER()
的PARTITION BY
子句和外部GROUP BY
子句严格来说不是必需的,因为子查询无论如何都只过滤一个数据;我保留了它们,以防您在某个时候需要删除过滤。因此,我将前 10 个过滤逻辑从子查询移到了外部查询。