表结构:
类别    品号                        厂商代号,厂商名称,  单价,         数量           是否主厂商 
采购 S091000349C00PBZ 61004R 东驰 0.75384000 0.00000000 主厂商
采购 S091000430D00PBZ 61202R 泰铭 0.20000000 0.00000000
采购 S091000430D00PBZ 61009R 抉胜 1.80000000 0.00000000 主厂商
采购 S091000463A00PBZ 61003R 洋发 0.42040000 0.00000000 主厂商
托工 S092000360B00P8K 67505R 金星 0.10000000 0.00000000
采购 N314000007B00P43 66601R 良晋 0.20960000 0.00000000 主厂商
想增加标识字段,条件:当同一采购类别,同一品号,同一数量,非主厂商单价高于主厂商单价时,标识为'高'

解决方案 »

  1.   

    增加个标识列 ,update下 不就可以了吗? 
    where 条件你已经描述的很清楚 
      

  2.   


    alter table test
    add [标志] varchar(2)update test
    set [标志]='高'
    where exists (select 1 from test a where a.类别=test.类别 and a.品号=test.品号 and a.数量=test.数量 and a.单价>test.单价 and a.是否主厂商='主厂商')
    and test.是否主厂商=null
      

  3.   


    [code=sql]
    IF(OBJECT_ID('TA','U') IS NOT NULL) DROP TABLE TA
    CREATE TABLE TA(类别 VARCHAR(10), 品号  VARCHAR(20),                       
    厂商代号  VARCHAR(10),厂商名称 VARCHAR(10),  
    单价 FLOAT,数量 FLOAT,是否主厂商 VARCHAR(10))
    INSERT INTO TA
    SELECT '采购', 'S091000349C00PBZ','61004R','东驰',0.75384000, 0.00000000,'主厂商' UNION ALL
    SELECT '采购', 'S091000430D00PBZ','61202R','泰铭',0.20000000, 0.00000000,' '      UNION ALL
    SELECT '采购', 'S091000430D00PBZ','61009R','抉胜',1.80000000, 0.00000000,'主厂商' UNION ALL
    SELECT '采购', 'S091000463A00PBZ','61003R','洋发',0.42040000, 0.00000000,'主厂商' UNION ALL
    SELECT '托工', 'S092000360B00P8K','67505R','金星',0.10000000, 0.00000000,'   '     UNION ALL
    SELECT '采购', 'N314000007B00P43','66601R','良晋',0.20960000, 0.00000000,'主厂商' 
    SELECT * FROM TA tALTER TABLE  TA ADD Flag VARCHAR(10)
     
    UPDATE TA
    SET Flag='高'
    FROM TA AS T1,(SELECT * FROM TA WHERE TA.是否主厂商='') AS T2
    WHERE T1.类别=T2.类别 AND T1.品号=T2.品号
    AND T1.数量=T2.数量 AND T2.单价>T1.单价 [/code]
      

  4.   

    我也想结啊.可更改了字段长度还是有问题,该更新的数据没更新到
    采购 L011000765A00P0@ 61018R 泽城 7.58080000 0.00000000 主厂商
    采购 L011000765A00P0@ 60000 新厂商 6.00000000 0.00000000
    此时应该得到结果:
    采购 L011000765A00P0@ 61018R 泽城 7.58080000 0.00000000 主厂商  高
    采购 L011000765A00P0@ 60000 新厂商 6.00000000 0.00000000    
      

  5.   


    你开始说的是非主厂商单价高于主厂单价时,标识为'高',那样用4楼的当然不没有结果啦!
    把最后的AND T1.数量=T2.数量 AND T2.单价>T1.单价 改成<号
      

  6.   

    类别         品号            厂商代号       厂商名称     单     数量                     是否主厂商      Flag
    ---------- -------------------- ---------- ---------- ---------------------- ---------------------- ---------- ----------
    采?         S091000349C00PBZ     61004R     ??         0.75384    0                      主厂商        NULL
    采?         S091000430D00PBZ     61202R     泰?         0.2        0                                   NULL
    采?         S091000430D00PBZ     61009R     抉胜         1.        0                      主厂商        高
    采?         S091000463A00PBZ     61003R     洋?         0.4204       0                      主厂商      NULL
    托工        S092000360B00P8K     67505R     金星         0.1        0                                  NULL
    采?         N314000007B00P43     66601R     良?         0.2096        0                      主厂商     NULL(6 row(s) affected)你要的不是这种效果吗?我是运行4楼的,是你的需求啊
      

  7.   


    ----------------------------------------------------------------
    -- Author  :TravyLee(物是人非事事休,欲语泪先流!)
    -- Date    :2012-12-04 10:01:41
    -- Version:--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) -- Feb 10 2012 19:13:17 -- Copyright (c) Microsoft Corporation-- Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)--
    ----------------------------------------------------------------
    --> 测试数据:[test]
    if object_id('[test]') is not null 
    drop table [test]
    go 
    create table [test]
    (
    [类别] varchar(4),
    [品号] varchar(16),
    [厂商代号] varchar(6),
    [厂商名称] varchar(4),
    [单价] numeric(9,8),
    [数量] numeric(9,8),
    [是否主厂商] varchar(6)
    )
    insert [test]
    select '采购','S091000349C00PBZ','61004R','东驰',0.75384000,0.00000000,'主厂商' union all
    select '采购','S091000349C00PBZ','61004R','东驰',0.85384000,0.00000000,null union all
    select '采购','S091000430D00PBZ','61202R','泰铭',2.20000000,0.00000000,null union all
    select '采购','S091000430D00PBZ','61202R','泰铭',0.20000000,0.00000000,null union all
    select '采购','S091000430D00PBZ','61009R','抉胜',1.80000000,0.00000000,'主厂商' union all
    select '采购','S091000463A00PBZ','61003R','洋发',0.42040000,0.00000000,'主厂商' union all
    select '托工','S092000360B00P8K','67505R','金星',0.10000000,0.00000000,null union all
    select '采购','N314000007B00P43','66601R','良晋',0.20960000,0.00000000,'主厂商' union all
    select '采购','N314000007B00P43','66601R','良晋',0.19960000,0.00000000,null
    go
    alter table test
    add [标志] varchar(10)
    goupdate test 
    set [标志]='高' 
    where exists(select 1 from test b 
    where test.类别=b.类别 and test.品号=b.品号 and test.数量=b.数量 and test.单价>b.单价 and b.是否主厂商='主厂商')select * from test /*
    类别   品号               厂商代号   厂商名称 单价                                      数量                                      是否主厂商  标志
    ---- ---------------- ------ ---- --------------------------------------- --------------------------------------- ------ ----------
    采购   S091000349C00PBZ 61004R 东驰   0.75384000                              0.00000000                              主厂商    NULL
    采购   S091000349C00PBZ 61004R 东驰   0.85384000                              0.00000000                              NULL   高
    采购   S091000430D00PBZ 61202R 泰铭   2.20000000                              0.00000000                              NULL   高
    采购   S091000430D00PBZ 61202R 泰铭   0.20000000                              0.00000000                              NULL   NULL
    采购   S091000430D00PBZ 61009R 抉胜   1.80000000                              0.00000000                              主厂商    NULL
    采购   S091000463A00PBZ 61003R 洋发   0.42040000                              0.00000000                              主厂商    NULL
    托工   S092000360B00P8K 67505R 金星   0.10000000                              0.00000000                              NULL   NULL
    采购   N314000007B00P43 66601R 良晋   0.20960000                              0.00000000                              主厂商    NULL
    采购   N314000007B00P43 66601R 良晋   0.19960000                              0.00000000                              NULL   NULL(9 行受影响)
    */
      

  8.   

    你的数据不单是这些吧!如果是这些,那就是无结果的了!
    UPDATE TASET Flag='高'FROM TA AS T1,(SELECT * FROM TA WHERE TA.是否主厂商='') AS T2
    WHERE T1.类别=T2.类别 AND T1.品号=T2.品号 AND T1.厂商代号=T2. 厂商代号
    AND T1.数量=T2.数量 AND T2.单价<T1.单价 
      

  9.   

    请帮忙,前面都不行.给出的测试数据:
    类别         品号          厂商代号 厂商名称     单价     数量      是否主厂商      Flag
    采购 L011000765A00 61018 泽城 7.580800   100     主厂商
    采购 L011000765A00 61018 泽城 7.000000   200     主厂商
    采购 L011000765A00 61018 泽城 6.000000   300     主厂商
    采购 L011000765A00 60000 卡而 7.000000   100
    采购 L011000765A00 60001 大通 8.000000   200
    采购 L011000765A00 60003 顺利 5.000000   300
    托工 L011000765A00 61018 泽城 7.580800   100     主厂商
    托工 L011000765A00 61018 泽城 7.000000   200     主厂商
    托工 L011000765A00 61018 泽城 6.000800   300     主厂商
    托工 L011000765A00 60000 卡而 8.000000   100
    托工 L011000765A00 60001 大通 7.500000   200
    托工 L011000765A00 60003 顺利 5.800000   300
    需要得到结果:
    类别         品号          厂商代号 厂商名称     单价     数量      是否主厂商      Flag
    采购 L011000765A00 61018 泽城 7.580800   100     主厂商         高
    采购 L011000765A00 61018 泽城 7.000000   200     主厂商
    采购 L011000765A00 61018 泽城 6.000000   300     主厂商         高 
    采购 L011000765A00 60000 卡而 7.000000   100
    采购 L011000765A00 60001 大通 8.000000   200
    采购 L011000765A00 60003 顺利 5.000000   300
    托工 L011000765A00 61018 泽城 7.580800   100     主厂商
    托工 L011000765A00 61018 泽城 7.000000   200     主厂商
    托工 L011000765A00 61018 泽城 6.000800   300     主厂商         高
    托工 L011000765A00 60000 卡而 8.000000   100
    托工 L011000765A00 60001 大通 7.500000   200
    托工 L011000765A00 60003 顺利 5.800000   300
    另外数据大概有30W,循环也可以.但不知道大概需要多长时间.硬件4X2.0(6核).  Memory 64GB
      

  10.   


    ----------------------------------------------------------------
    -- Author  :TravyLee(物是人非事事休,欲语泪先流!)
    -- Date    :2012-12-04 11:43:56
    -- Version:--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) -- Feb 10 2012 19:13:17 -- Copyright (c) Microsoft Corporation-- Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)--
    ----------------------------------------------------------------
    --> 测试数据:[test]
    if object_id('[test]') is not null drop table [test]
    go 
    create table [test]
    (
    [类别] varchar(4),
    [品号] varchar(13),
    [厂商代号] int,
    [厂商名称] varchar(4),
    [单价] numeric(7,6),
    [数量] int,
    [是否主厂商] varchar(6),
    [Flag] varchar(10)
    )
    insert [test]
    select '采购','L011000765A00',61018,'泽城',7.580800,100,'主厂商',null union all
    select '采购','L011000765A00',61018,'泽城',7.000000,200,'主厂商',null union all
    select '采购','L011000765A00',61018,'泽城',6.000000,300,'主厂商',null union all
    select '采购','L011000765A00',60000,'卡而',7.000000,100,null,null union all
    select '采购','L011000765A00',60001,'大通',8.000000,200,null,null union all
    select '采购','L011000765A00',60003,'顺利',5.000000,300,null,null union all
    select '托工','L011000765A00',61018,'泽城',7.580800,100,'主厂商',null union all
    select '托工','L011000765A00',61018,'泽城',7.000000,200,'主厂商',null union all
    select '托工','L011000765A00',61018,'泽城',6.000800,300,'主厂商',null union all
    select '托工','L011000765A00',60000,'卡而',8.000000,100,null,null union all
    select '托工','L011000765A00',60001,'大通',7.500000,200,null,null union all
    select '托工','L011000765A00',60003,'顺利',5.800000,300,null,null
    goupdate test
    set [Flag]='高'
    where exists(select 1 from test a where a.类别=test.类别 and a.品号=test.品号
    and a.数量=test.数量 and a.单价<test.单价 and a.是否主厂商='主厂商')
    --这是我按照你描述的思路写出来的结果
    select * from test /*
    类别   品号            厂商代号        厂商名称 单价                                      数量          是否主厂商  Flag
    ---- ------------- ----------- ---- --------------------------------------- ----------- ------ ----------
    采购   L011000765A00 61018       泽城   7.580800                                100         主厂商    NULL
    采购   L011000765A00 61018       泽城   7.000000                                200         主厂商    NULL
    采购   L011000765A00 61018       泽城   6.000000                                300         主厂商    NULL
    采购   L011000765A00 60000       卡而   7.000000                                100         NULL   NULL
    采购   L011000765A00 60001       大通   8.000000                                200         NULL   高
    采购   L011000765A00 60003       顺利   5.000000                                300         NULL   NULL
    托工   L011000765A00 61018       泽城   7.580800                                100         主厂商    NULL
    托工   L011000765A00 61018       泽城   7.000000                                200         主厂商    NULL
    托工   L011000765A00 61018       泽城   6.000800                                300         主厂商    NULL
    托工   L011000765A00 60000       卡而   8.000000                                100         NULL   高
    托工   L011000765A00 60001       大通   7.500000                                200         NULL   高
    托工   L011000765A00 60003       顺利   5.800000                                300         NULL   NULL(12 行受影响)
    */
      

  11.   


    ----------------------------------------------------------------
    -- Author  :TravyLee(物是人非事事休,欲语泪先流!)
    -- Date    :2012-12-04 11:43:56
    -- Version:--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) -- Feb 10 2012 19:13:17 -- Copyright (c) Microsoft Corporation-- Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)--
    ----------------------------------------------------------------
    --> 测试数据:[test]
    if object_id('[test]') is not null drop table [test]
    go 
    create table [test]
    (
    [类别] varchar(4),
    [品号] varchar(13),
    [厂商代号] int,
    [厂商名称] varchar(4),
    [单价] numeric(7,6),
    [数量] int,
    [是否主厂商] varchar(6),
    [Flag] varchar(10)
    )
    insert [test]
    select '采购','L011000765A00',61018,'泽城',7.580800,100,'主厂商',null union all
    select '采购','L011000765A00',61018,'泽城',7.000000,200,'主厂商',null union all
    select '采购','L011000765A00',61018,'泽城',6.000000,300,'主厂商',null union all
    select '采购','L011000765A00',60000,'卡而',7.000000,100,null,null union all
    select '采购','L011000765A00',60001,'大通',8.000000,200,null,null union all
    select '采购','L011000765A00',60003,'顺利',5.000000,300,null,null union all
    select '托工','L011000765A00',61018,'泽城',7.580800,100,'主厂商',null union all
    select '托工','L011000765A00',61018,'泽城',7.000000,200,'主厂商',null union all
    select '托工','L011000765A00',61018,'泽城',6.000800,300,'主厂商',null union all
    select '托工','L011000765A00',60000,'卡而',8.000000,100,null,null union all
    select '托工','L011000765A00',60001,'大通',7.500000,200,null,null union all
    select '托工','L011000765A00',60003,'顺利',5.800000,300,null,null
    goupdate test
    set [Flag]='高'
    where exists(select 1 from test a where a.类别=test.类别 and a.品号=test.品号
    and a.数量=test.数量 and a.单价<test.单价 and a.是否主厂商 is null)select * from test /*
    类别   品号            厂商代号        厂商名称 单价                                      数量          是否主厂商  Flag
    ---- ------------- ----------- ---- --------------------------------------- ----------- ------ ----------
    采购   L011000765A00 61018       泽城   7.580800                                100         主厂商    高
    采购   L011000765A00 61018       泽城   7.000000                                200         主厂商    NULL
    采购   L011000765A00 61018       泽城   6.000000                                300         主厂商    高
    采购   L011000765A00 60000       卡而   7.000000                                100         NULL   NULL
    采购   L011000765A00 60001       大通   8.000000                                200         NULL   NULL
    采购   L011000765A00 60003       顺利   5.000000                                300         NULL   NULL
    托工   L011000765A00 61018       泽城   7.580800                                100         主厂商    NULL
    托工   L011000765A00 61018       泽城   7.000000                                200         主厂商    NULL
    托工   L011000765A00 61018       泽城   6.000800                                300         主厂商    高
    托工   L011000765A00 60000       卡而   8.000000                                100         NULL   NULL
    托工   L011000765A00 60001       大通   7.500000                                200         NULL   NULL
    托工   L011000765A00 60003       顺利   5.800000                                300         NULL   NULL(12 行受影响)
    */