Detail表结构如下(两个字段):
RMANumber POType
Header表两个字段(与明细表一样)
RMANumber POType
其中用字母表示的状态是以下(存放在字段POType里)
O→D→C→P→S→G→F(状态字母意思是:O 打开,D 部分确认,C 完全确认,P 部份寄送,S 完全寄送,G 部分收件,F 完全收件 )
例如:
select * from detail 的结果如下:
RMANumber -- potype
PLC001242 D
PLC001242 S
PLC001242 P
PLC001242 F
PLC001242 G
PLC001242 O
PLC001242 C
select * from Header的结果如下:
RMANumber -- potype
PLC001242 F
Header表的POType是反应这条RMANumber=PLC001242的最终状态。
我打个比方,
第一种存在情况:
(注:按以下的箭头字母表示来更改状态:O→D→C→P→S→G→F)
假如明细表里的potype所有都等O的时候Header表里就状态就为O
如果明细表里的potype所有都等C的时候Header表里就状态就为C
依此类推。。
第二种存在情况:
(注:按以下的箭头字母表示来更改状态:O→D→C→P→S→G→F)
如果明细表里的potype有些等C的有些等于O的时候Header表里的状态就为D(注:因为明细表里的所有状态还有存在有(O 打开状态)的记录,所以Header的状态正确应为D(部分确认),等明细表的所有状态都为C了header的状态才为C,上面以标注是按箭头字母来更改状态)
如果明细表里的potype有些等C的有些等于D的时候Header表里的状态就为D(部分确认).(注:因为detail表里还存在为D的记录,所以header的状态只能为D)
如果明细表里的potype有些等(S 寄送)的有些等于(C 完全确认)的时候Header表里的状态就为(P 部队寄送)(注:因为detail表里还存在为C的记录,所以header的状态只能为P)
依此类推下去。。
我想有存储过程来实现不知怎么写,,写了一半就觉得不知哪是哪了。。
我再说明一次,Header的状态是通过detail的状态来变动的。
detail表可以存在很多种状态(O→D→C→P→S→G→F)中的任何一种,但header表只能有一种状态,因为是一对多的关系.怎么通过detail的状态来判断header的状态呢。。。高手来帮帮我啊。。今晚要加班了。。。。。
O → D → C → P→ S→ G→ F
打开状态 部分确认 完全确认 部分寄送 完全寄送 部分收件 完全收件
8 个解决方案
#1
会不会有这种情况:
同时存在这些状态:O D C P
同时存在这些状态:O D C P
#2
会
#3
任一种都存在(O→D→C→P→S→G→F)
O D C P,G F C,S P F等等
O D C P,G F C,S P F等等
#4
急啊
#5
if (明细存在 G or F )
begin
if 明细全是 F then F ELSE G
end
else
begin
if (明细存在 P OR S)
begin
if 明细全是 S then S ELSE P
end
else
begin
if (明细存在 D OR C)
begin
if 明细全是 c then C ELSE D
end
else
begin
if 明细全是 O then O ELSE null
end
end
end
----------------
拷出去自己加空格看的清楚点。
begin
if 明细全是 F then F ELSE G
end
else
begin
if (明细存在 P OR S)
begin
if 明细全是 S then S ELSE P
end
else
begin
if (明细存在 D OR C)
begin
if 明细全是 c then C ELSE D
end
else
begin
if 明细全是 O then O ELSE null
end
end
end
----------------
拷出去自己加空格看的清楚点。
#6
不明白。。
#7
我再看了一遍,还是看不太懂,不过我想可以用case when 来实现。。
可否举个例试试。。
可否举个例试试。。
#8
我举个例子:
O→D→C→P→S→G→F(状态字母意思是:O 打开,D 部分确认,C 完全确认,P 部份寄送,S 完全寄送,G 部分收件,F 完全收件 )
这里明细表:
RMANumber -- potype
PLC001242 D
PLC001242 S
PLC001242 P
这是摘要表:
RMANumber -- potype
PLC001242 P
(注:O→D→C→P→S→G→F)
那么摘要的状态是要反应明细里的最后的状态,我上面的明细表里有一条记录是"完成寄送 S",其中两条还没有完全寄送或是在寄送之前的状态,D 是部分确认, P 是部分寄送.所以用摘要表的状态来反应明细表的最终状态呢...是不是以上的摘要状态是不是"部分寄送 P"的状态呢..
我在打个比方,明细有三条,其中一条是部分确认,一条是完全寄送,另一条是部分寄送,又有部分确认,又有部分寄送,又有完全寄送.说明明细表还存在没有寄送的信息,所以摘要的状态只能用部分寄送 P 这个来描述PLC001242在明细表的状态.
不知道我这样说大家明不明白...
O→D→C→P→S→G→F(状态字母意思是:O 打开,D 部分确认,C 完全确认,P 部份寄送,S 完全寄送,G 部分收件,F 完全收件 )
这里明细表:
RMANumber -- potype
PLC001242 D
PLC001242 S
PLC001242 P
这是摘要表:
RMANumber -- potype
PLC001242 P
(注:O→D→C→P→S→G→F)
那么摘要的状态是要反应明细里的最后的状态,我上面的明细表里有一条记录是"完成寄送 S",其中两条还没有完全寄送或是在寄送之前的状态,D 是部分确认, P 是部分寄送.所以用摘要表的状态来反应明细表的最终状态呢...是不是以上的摘要状态是不是"部分寄送 P"的状态呢..
我在打个比方,明细有三条,其中一条是部分确认,一条是完全寄送,另一条是部分寄送,又有部分确认,又有部分寄送,又有完全寄送.说明明细表还存在没有寄送的信息,所以摘要的状态只能用部分寄送 P 这个来描述PLC001242在明细表的状态.
不知道我这样说大家明不明白...
#1
会不会有这种情况:
同时存在这些状态:O D C P
同时存在这些状态:O D C P
#2
会
#3
任一种都存在(O→D→C→P→S→G→F)
O D C P,G F C,S P F等等
O D C P,G F C,S P F等等
#4
急啊
#5
if (明细存在 G or F )
begin
if 明细全是 F then F ELSE G
end
else
begin
if (明细存在 P OR S)
begin
if 明细全是 S then S ELSE P
end
else
begin
if (明细存在 D OR C)
begin
if 明细全是 c then C ELSE D
end
else
begin
if 明细全是 O then O ELSE null
end
end
end
----------------
拷出去自己加空格看的清楚点。
begin
if 明细全是 F then F ELSE G
end
else
begin
if (明细存在 P OR S)
begin
if 明细全是 S then S ELSE P
end
else
begin
if (明细存在 D OR C)
begin
if 明细全是 c then C ELSE D
end
else
begin
if 明细全是 O then O ELSE null
end
end
end
----------------
拷出去自己加空格看的清楚点。
#6
不明白。。
#7
我再看了一遍,还是看不太懂,不过我想可以用case when 来实现。。
可否举个例试试。。
可否举个例试试。。
#8
我举个例子:
O→D→C→P→S→G→F(状态字母意思是:O 打开,D 部分确认,C 完全确认,P 部份寄送,S 完全寄送,G 部分收件,F 完全收件 )
这里明细表:
RMANumber -- potype
PLC001242 D
PLC001242 S
PLC001242 P
这是摘要表:
RMANumber -- potype
PLC001242 P
(注:O→D→C→P→S→G→F)
那么摘要的状态是要反应明细里的最后的状态,我上面的明细表里有一条记录是"完成寄送 S",其中两条还没有完全寄送或是在寄送之前的状态,D 是部分确认, P 是部分寄送.所以用摘要表的状态来反应明细表的最终状态呢...是不是以上的摘要状态是不是"部分寄送 P"的状态呢..
我在打个比方,明细有三条,其中一条是部分确认,一条是完全寄送,另一条是部分寄送,又有部分确认,又有部分寄送,又有完全寄送.说明明细表还存在没有寄送的信息,所以摘要的状态只能用部分寄送 P 这个来描述PLC001242在明细表的状态.
不知道我这样说大家明不明白...
O→D→C→P→S→G→F(状态字母意思是:O 打开,D 部分确认,C 完全确认,P 部份寄送,S 完全寄送,G 部分收件,F 完全收件 )
这里明细表:
RMANumber -- potype
PLC001242 D
PLC001242 S
PLC001242 P
这是摘要表:
RMANumber -- potype
PLC001242 P
(注:O→D→C→P→S→G→F)
那么摘要的状态是要反应明细里的最后的状态,我上面的明细表里有一条记录是"完成寄送 S",其中两条还没有完全寄送或是在寄送之前的状态,D 是部分确认, P 是部分寄送.所以用摘要表的状态来反应明细表的最终状态呢...是不是以上的摘要状态是不是"部分寄送 P"的状态呢..
我在打个比方,明细有三条,其中一条是部分确认,一条是完全寄送,另一条是部分寄送,又有部分确认,又有部分寄送,又有完全寄送.说明明细表还存在没有寄送的信息,所以摘要的状态只能用部分寄送 P 这个来描述PLC001242在明细表的状态.
不知道我这样说大家明不明白...