-1

我的问题源于此:

VBA(Excel)与 SQL - 比较两行中的值(循环)

我稍微修改了脚本,它看起来像这样:

;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

我希望这是有道理的。我一直在玩select into,甚至插入所有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 语句是我喜欢的方式。除了该死的东西不适用于 insert into 命令..(您可能不得不与 final 混为一谈)。我现在害怕 CTE,我可能永远不会再使用它们了。

谢谢大家的帮助。

4

1 回答 1

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;

这会将 in 列中的值替换为 in 列Q中的MyTable值。这是你想要做的吗?(基于“现在..我想要的只是获取 Q 列(其中 Q 与 NextM 相关)并将其放入我原来的 mytable 中。”)prodidfinal

于 2012-07-18T13:11:21.150 回答