关于SQL中做一些数据筛选

Cs_Eric_Hew 2017-12-27 09:28:07
现有两张表
表A
ID money Umoney ShopingID time buff
编号 金额 运输费 商品ID 发出时间 状态

表B
ID SunmMoney ShopingID1 time2 ShopingID1 time2....
编号 总金额 商品ID 发出时间1

表A和表B的ID 是一致的, 表B的金额 是表A中 两个金额相加的值,切状态要为1(正常)
要求根据表B中的ID 去查询,表A中两个金额相加等于表B总金额,
在表B中列出符合的商品ID 和发出时间
可能还有其他特殊情况,列如: 表A中的ID有多个,符合表B要求的也有多个 则需要把每个都放到表B中!
...全文
608 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-12-29
  • 打赏
  • 举报
回复
这种情况就不能存到B表了,可以按照这种形式读取出来,但是由于列数不固定,所以表也不能提前新建好。或者用动态拼接语句的方式可以试试
Cs_Eric_Hew 2017-12-29
  • 打赏
  • 举报
回复
引用 18 楼 sinat_28984567 的回复:
这种情况就不能存到B表了,可以按照这种形式读取出来,但是由于列数不固定,所以表也不能提前新建好。或者用动态拼接语句的方式可以试试
应该怎么写比较好!
Cs_Eric_Hew 2017-12-28
  • 打赏
  • 举报
回复
引用 12 楼 RINK_1 的回复:
如果你B表的ShopingID1对应A表的满足条件的第一个ShopingID1,后面以此类推。而B表的数据又是预先存在的,所以是进行更新操作,那你B表的ShopingID和Time字段的数目应该是固定的吧。难道这B表的字段会随着A表对应记录的数量增加而同步增加?
差不多这个意思!
Cs_Eric_Hew 2017-12-28
  • 打赏
  • 举报
回复
引用 16 楼 jscshe 的回复:
[quote=引用 15 楼 sinat_28984567 的回复:] [quote=引用 14 楼 jscshe 的回复:] [quote=引用 10 楼 sinat_28984567 的回复:] [quote=引用 9 楼 jscshe 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果[/quote] 假设表A的数据是 ID money Umoney ShopingID time buff S1 295 2.5 G1 2017-1-1 1 S1 295 2.5 G2 2017-1-2 1 S1 200 5 G3 2017-1-4 1 表B数据 ID SunmMoney ShopingID1 time2 ShopingID1 time2.... S1 595 G1 2017-1-1 G2 2017-1-2 S1 205 G3 2017-1-4 需要根据表A的数据进行匹配 红色是需要在表B中插入的数据 [/quote] b表 ShopingID1 time2 多个 ShopingID1 time2 列名一样?[/quote] 对的,[/quote] 有一些特殊情况 我是在不知道怎么处理 比如 ID money Umoney ShopingID time buff S1 100 2.5 G1 2017-1-1 1 S1 100 2.5 G2 2017-1-2 1 S1 200 5 G3 2017-1-4 1 表B数据 ID SunmMoney ShopingID1 time2 ShopingID1 time2.... S1 205 G1 2017-1-1 G2 2017-1-2 S1 205 G3 2017-1-4 遇到这情况 就不知道咋整了!
Cs_Eric_Hew 2017-12-28
  • 打赏
  • 举报
回复
引用 15 楼 sinat_28984567 的回复:
[quote=引用 14 楼 jscshe 的回复:] [quote=引用 10 楼 sinat_28984567 的回复:] [quote=引用 9 楼 jscshe 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果[/quote] 假设表A的数据是 ID money Umoney ShopingID time buff S1 295 2.5 G1 2017-1-1 1 S1 295 2.5 G2 2017-1-2 1 S1 200 5 G3 2017-1-4 1 表B数据 ID SunmMoney ShopingID1 time2 ShopingID1 time2.... S1 595 G1 2017-1-1 G2 2017-1-2 S1 205 G3 2017-1-4 需要根据表A的数据进行匹配 红色是需要在表B中插入的数据 [/quote] b表 ShopingID1 time2 多个 ShopingID1 time2 列名一样?[/quote] 对的,
二月十六 2017-12-28
  • 打赏
  • 举报
回复
引用 14 楼 jscshe 的回复:
[quote=引用 10 楼 sinat_28984567 的回复:] [quote=引用 9 楼 jscshe 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果[/quote] 假设表A的数据是 ID money Umoney ShopingID time buff S1 295 2.5 G1 2017-1-1 1 S1 295 2.5 G2 2017-1-2 1 S1 200 5 G3 2017-1-4 1 表B数据 ID SunmMoney ShopingID1 time2 ShopingID1 time2.... S1 595 G1 2017-1-1 G2 2017-1-2 S1 205 G3 2017-1-4 需要根据表A的数据进行匹配 红色是需要在表B中插入的数据 [/quote] b表 ShopingID1 time2 多个 ShopingID1 time2 列名一样?
Cs_Eric_Hew 2017-12-28
  • 打赏
  • 举报
回复
引用 10 楼 sinat_28984567 的回复:
[quote=引用 9 楼 jscshe 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果[/quote] 假设表A的数据是 ID money Umoney ShopingID time buff S1 295 2.5 G1 2017-1-1 1 S1 295 2.5 G2 2017-1-2 1 S1 200 5 G3 2017-1-4 1 表B数据 ID SunmMoney ShopingID1 time2 ShopingID1 time2.... S1 595 G1 2017-1-1 G2 2017-1-2 S1 205 G3 2017-1-4 需要根据表A的数据进行匹配 红色是需要在表B中插入的数据
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
[quote=引用 3 楼 sinat_28984567 的回复:] 不是! 表B中 ID SunmMoney 已经存在的,根据这2个在表A中查找符合的项目 然后插入 表B的 ShopingID1 time2 ShopingID1 time2...
RINK_1 2017-12-27
  • 打赏
  • 举报
回复
如果你B表的ShopingID1对应A表的满足条件的第一个ShopingID1,后面以此类推。而B表的数据又是预先存在的,所以是进行更新操作,那你B表的ShopingID和Time字段的数目应该是固定的吧。难道这B表的字段会随着A表对应记录的数量增加而同步增加?
二月十六 2017-12-27
  • 打赏
  • 举报
回复
是这个意思吗?
INSERT  INTO B
        ( ID ,
          SunmMoney ,
          ShopingID1 ,
          time2
        )
        SELECT  Id ,
                SUM(a.money + a.Umoney) ,
                ShopingID1 ,
                time
        FROM    a
        WHERE   buff = 1
        GROUP BY Id ,
                ShopingID1 ,
                time
zjcxc 2017-12-27
  • 打赏
  • 举报
回复
select *
from a, b
where a.id=b.id and (a.money  + a.Umoney)=b.SunmMoney  
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc 的回复:
select *
from a, b
where a.id=b.id and (a.money  + a.Umoney)=b.SunmMoney  
要写一个存储过程 把商品ID 和发出时间 插入到表B中
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
引用 10 楼 sinat_28984567 的回复:
[quote=引用 9 楼 jscshe 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果[/quote] 稍等!
二月十六 2017-12-27
  • 打赏
  • 举报
回复
引用 9 楼 jscshe 的回复:
[quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中[/quote] 给出测试数据和想要的结果
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
[quote=引用 7 楼 jscshe 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果[/quote] 在表B中会有 商品1 发货时间1 商品2 发货时间2 ,多条就一次插入这些列中
二月十六 2017-12-27
  • 打赏
  • 举报
回复
引用 7 楼 jscshe 的回复:
[quote=引用 5 楼 sinat_28984567 的回复:] 试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间 [/quote] 1、存储过程和sql语句一样,只不过加一个
CREATE PROC dbo.proA
AS
    BEGIN   
        UPDATE  B
        SET     ShopingID1 = A.ShopingID1 ,
                time = A.time
        FROM    A
        WHERE   a.id = b.id
                AND b.SunmMoney = a.money + a.umoney
    END
GO

多条的想怎么弄?用逗号分隔还是在怎么着?给出测试数据和想要的结果
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
而且 可能表B中的一个ID 对应着几个 商品ID 和时间
Cs_Eric_Hew 2017-12-27
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney
存储过程怎么写!
二月十六 2017-12-27
  • 打赏
  • 举报
回复
试试这个,没测试
UPDATE  B
SET     ShopingID1 = A.ShopingID1 ,
        time = A.time
FROM    A
WHERE   a.id = b.id
        AND b.SunmMoney = a.money + a.umoney

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧