返回最小行数()SQL
这可能是我提出过的最笨拙的问题。我必须使用一个只读帐户,所以我不能使用临时表或任何使这更容易的东西。目标是在返回最小行数()SQL,sql,sql-server,Sql,Sql Server,这可能是我提出过的最笨拙的问题。我必须使用一个只读帐户,所以我不能使用临时表或任何使这更容易的东西。目标是在sumpiesesstrapped=maxSum时返回MIN(RowNum)。我已经尝试将整个查询添加到另一个子查询中,试图返回MIN(RowNum)但是,它是一对多,与主键JobNo绑定,当我将它绑定到JobNo和StepNo时,它给出的结果与下面的结果相同 SELECT JobNo, StepNo, sumPiecesScrapped, maxSum, CASE WHEN sumPie
sumpiesesstrapped=maxSum
时返回MIN(RowNum)
。我已经尝试将整个查询添加到另一个子查询中,试图返回MIN(RowNum)
但是,它是一对多,与主键JobNo
绑定,当我将它绑定到JobNo
和StepNo
时,它给出的结果与下面的结果相同
SELECT
JobNo,
StepNo,
sumPiecesScrapped,
maxSum,
CASE
WHEN sumPiecesScrapped = maxSum THEN ROW_NUMBER() OVER(PARTITION BY JobNo ORDER BY JobNo, StepNo)
ELSE 0
END AS RowNum
FROM
(
SELECT
JobNo,
StepNo,
sumPiecesScrapped
FROM
(
SELECT
JobNo,
StepNo,
SUM(PiecesScrapped) as sumPiecesScrapped
FROM
(
SELECT
JobNo,
StepNo,
PiecesFinished,
PiecesScrapped
FROM TimeTicketDet
) tt2
GROUP BY JobNo, StepNo
) tt3
GROUP BY JobNo, StepNo, sumPiecesScrapped
) tt4
LEFT JOIN
(
SELECT
JobNo as tt5JobNo,
MAX(PiecesScrapped) as maxSum
FROM
(
SELECT
JobNo,
PiecesScrapped
FROM TimeTicketDet
) tt5
GROUP BY JobNo
) tt5
ON tt5.tt5JobNo = tt4.JobNo
WHERE tt4.JobNo = '12345'
结果:
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 4 |
| 12345 | 60 | 5 | 5 | 5 |
| 12345 | 70 | 5 | 5 | 6 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 3 |
| 12345 | 60 | 5 | 5 | 3 |
| 12345 | 70 | 5 | 5 | 3 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+-----------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+-----------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | Something |
| 12345 | 40 | 5 | 5 | 0 |
| 12345 | 60 | 5 | 5 | 0 |
| 12345 | 70 | 5 | 5 | 0 |
+-------+--------+-------------------+--------+-----------+
所需结果:
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 4 |
| 12345 | 60 | 5 | 5 | 5 |
| 12345 | 70 | 5 | 5 | 6 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 3 |
| 12345 | 60 | 5 | 5 | 3 |
| 12345 | 70 | 5 | 5 | 3 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+-----------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+-----------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | Something |
| 12345 | 40 | 5 | 5 | 0 |
| 12345 | 60 | 5 | 5 | 0 |
| 12345 | 70 | 5 | 5 | 0 |
+-------+--------+-------------------+--------+-----------+
其他可能的结果:
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 4 |
| 12345 | 60 | 5 | 5 | 5 |
| 12345 | 70 | 5 | 5 | 6 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+--------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+--------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | 3 |
| 12345 | 40 | 5 | 5 | 3 |
| 12345 | 60 | 5 | 5 | 3 |
| 12345 | 70 | 5 | 5 | 3 |
+-------+--------+-------------------+--------+--------+
+-------+--------+-------------------+--------+-----------+
| JobNo | StepNo | sumPiecesScrapped | maxSum | RowNum |
+-------+--------+-------------------+--------+-----------+
| 12345 | 10 | 0 | 5 | 0 |
| 12345 | 20 | 1 | 5 | 0 |
| 12345 | 30 | 5 | 5 | Something |
| 12345 | 40 | 5 | 5 | 0 |
| 12345 | 60 | 5 | 5 | 0 |
| 12345 | 70 | 5 | 5 | 0 |
+-------+--------+-------------------+--------+-----------+
如果没有一些表格定义和你想要实现的目标的清晰性,我就无法理解这一点。但MIN(行号)始终为1.:)你说不能使用临时表是什么意思?每个用户都可以访问
tempdb
您应该仍然能够使用类似CREATE TABLE#temp(someColumn varchar(10))的语法
或(可选)表变量。@SeanLange在TimeTicketSet表中,JobNo是主键,每个JobNo可以有多个步骤。我试图在没有cte的情况下使用SQL来计算第一次使用SUMPEGEESSCRAPPED=maxSum的时间。@Larnu UHHHHHH我当时肯定觉得需要写访问权限。让我去做一些测试。如果我尝试了所有这些解决方法,并且可以使用tempdb,我会觉得很愚蠢。为什么没有CTE呢?对于CTE,您肯定不需要写访问权限。如果没有一些表定义和您试图实现的目标的明确性,我就无法理解这一点。但MIN(行号)始终为1.:)你说不能使用临时表是什么意思?每个用户都可以访问tempdb
您应该仍然能够使用类似CREATE TABLE#temp(someColumn varchar(10))的语法
或(可选)表变量。@SeanLange在TimeTicketSet表中,JobNo是主键,每个JobNo可以有多个步骤。我试图在没有cte的情况下使用SQL来计算第一次使用SUMPEGEESSCRAPPED=maxSum的时间。@Larnu UHHHHHH我当时肯定觉得需要写访问权限。让我去做一些测试。如果我尝试了所有这些解决方法,并且可以使用tempdb,我会觉得很愚蠢。为什么没有CTE呢?您肯定不需要对CTE进行写访问。