我的问题源于此:
VBA (Excel) vs SQL - Comparing values in two rows (loop)
我已经修改了脚本,它看起来像这样:
;WITH data AS
(
SELECT a.i, a.M, b.M as NextM,
CASE WHEN a.M = 65 AND b.M = 120 THEN 1 ELSE 0 END AS shouldIncreaseQ
FROM MyTable a
LEFT OUTER JOIN MyTable b
ON a.i + 1 = b.i
), test as
(
SELECT data.M, data.NextM,
(SELECT COUNT(*) + 1 FROM data AS ref
WHERE ref.shouldIncreaseQ = 1 AND ref.i <= data.i) as Q FROM data
)
所以现在让我们从测试中选择*。我得到的东西看起来像这样。
M NextM Q
65 65 1
65 65 1
65 120 2
120 63 2
65 120 3
120 NULL 3
现在......我想要的就是拿Q列(其中Q属于NextM)并将其放在我的原始mytable中。
这样的事情:
i M Q
1 65 1
2 65 1
3 120 2
4 63 2
5 120 3
6 55 3
我希望这是有道理的。我一直在玩选择,甚至插入所有DAY(字面上几小时)没有运气。 (使用你可以想象的每种类型的连接)
提前谢谢你。 (也有人可以告诉我如何使我的表看起来更好..你用html做什么或什么)?
更新:
;WITH data AS
(
SELECT a.i, a.M, b.M as NextM,
CASE WHEN a.M = 65 AND b.M = 120 THEN 1 ELSE 0 END AS shouldIncreaseQ
FROM MyTable a
LEFT OUTER JOIN MyTable b
ON a.i + 1 = b.i
),
test as
(
SELECT data.i, data.M, data.NextM,
(SELECT COUNT(*) + 1 FROM data AS ref
WHERE ref.shouldIncreaseQ = 1 AND ref.i <= data.i) as Q FROM data
),
final as
(
select a.i, a.M as zw_step, b.Q as prodid
from test a
left outer join test b
on a.i - 1 = b.i
)
SELECT final.i, final.zw_step, final.prodid
FROM final
现在.. select语句是我喜欢它的方式。除了darn之外的东西不能用于插入命令..(你可能不得不愚弄最终)。 我现在害怕CTE,我可能永远不会再使用它了。
感谢大家的帮助。
答案 0 :(得分:1)
好的,我不太确定我是否正确理解你在寻找什么。但您可能想要替换
SELECT final.i, final.zw_step, final.prodid
FROM final;
与
UPDATE MT
SET MT.Q = F.prodid
FROM MyTable AS MT
INNER JOIN final AS F ON MT.i = F.i AND MT.M = F.zw_step;
这会将Q
中MyTable
列中的值替换为prodid
中final
列中的值。这是你想要做的吗? (根据“NOW ..我想要的是Q列(Q属于NextM)并将其放在我的原始mytable中。”)