2015-08-16 22 views
0

这里是我的表在我的Microsoft Access数据库:SQL:拆分一行到多行根据一定的规则

Terr(Prim) Terr(Sec) Qty 
---------- --------- ------- 
A    A   0.5 
A    B   0.5 

我想改变它,通过这样的SQL:

Type   Terr Qty 
----------- ---- ---- 
Original  A  0.5 
Original  A  0.5 
50-50 give  A  -0.5 
50-50 take  B  0.5 

规则:

  1. 创建两列,[类型]和[TERR]

  2. 如果[TERR(的Prim)] = [TERR(秒)],然后保持该行并[类型] = “原始”

  3. 如果[TERR(的Prim)] <> [TERR(SEC)] ,则:

    • 第1列:[类型] = “原始”,[TERR] = [TERR(的Prim)],其它列保持相同

    • 第2列:[类型] = “50-50 Give”,[Terr] = [Terr(Prim)],[Qty]变为负数

    • 行3:[类型] = “50-50取”,[TERR] = [TERR(SEC)],其它列保持相同

  4. 删除[TERR(的Prim)]和[TERR (SEC)]

+0

其中[TERR(普里姆)] <> [TERR(SEC)] ,,你可以做三个刀片在第一次和第二次select(或可能是se)之后带有插入语句(追加查询),随后是带有UNION语句的三个选择语句如果你使用MS-Access SQL,你不能在同一个查询中执行插入(追加)语句和删除操作(不是插入和更新),这使得它很棘手。所以,我认为这在VBA中会更快。你是否在寻求帮助,为此编写VBA代码?另外,请确认您使用的是MS-Access SQL。 – pghcpa

+0

我正在使用Microsoft Access。 ShA.t已经解决了这个问题。无论如何非常感谢你! –

回答

1

我认为你可以使用这样的查询:

SELECT "Original" As [Type], [TerrPrim] AS [Terr], Qty 
FROM t 
UNION ALL 
SELECT "50-50 Give" As [Type], [TerrPrim] AS [Terr], -Qty 
FROM t 
WHERE [TerrPrim] <> [TerrSec] 
UNION ALL 
SELECT "50-50 take" As [Type], [TerrSec] AS Terr, Qty 
FROM t 
WHERE [TerrPrim] <> [TerrSec];