选择进入和加入问题
问题描述:
我的问题源于此:选择进入和加入问题
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
)
所以,现在让SELECT * FROM测试。我得到了这样的东西。
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
我希望是有道理的。我一直在玩select into,甚至插入到所有DAY(几个小时),但没有运气。 (使用你可以想象的每种类型的连接)
在此先感谢您。 (也可以有人告诉我如何使我的表看起来更好..你使用HTML来做到这一点或什么)?
UPDATE:
;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语句是怎么样呢。除了补丁的东西不会用插入命令..(你可能不得不愚弄最后)。 我现在害怕CTE,我可能永远不会再使用它们。
感谢您的帮助。
答
好吧,我不太清楚,如果我正确理解你在找什么。但是,您可能希望与
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;
该更换
SELECT final.i, final.zw_step, final.prodid
FROM final;
将在final
取代Q
列中的值在MyTable
与值prodid
列。这是你想要做的吗? (基于“NOW ..我想要的只是Q列”(其中Q与NextM相关),并将其放在我原来的mytable中。“)
mytable是什么样的?它是否已经包含列Q? – Josien 2012-07-17 07:33:06
@Josien mytable可以包含列Q,但值将全为空。我想通过插入到...做到这一点,但是另一个问题发生..我有一个很好的选择语句,但只要我把插入到前面它不会正确插入。它只是添加到最后一行,而不是链接到正确的i值。我会在第二天发布我的代码 – akwarywo 2012-07-18 12:50:17