编号    单位1    单位2     单位1数量    单位2数量
A KG G      .810000       810.0
B P P      14.000000       4.0
C P P      14.000000       10.0
D KG G      .900000       900.0
....
我想对比出单位1数量和单位2数量不一致的记录,如果存在单位换算的话,希望可以考虑进去,比如1KG=1000G,这样A记录的数量就是一致的,不知道如何写这个查询,麻烦各位大侠指点,谢谢!

解决方案 »

  1.   

    ----------------------------------------------------------------------------------
    -- Author : htl258(Tony)
    -- Date   : 2010-05-18 16:34:11
    -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    -- Blog   : http://blog.csdn.net/htl258
    ------------------------------------------------------------------------------------> 生成测试数据表: [ta]
    IF OBJECT_ID('[ta]') IS NOT NULL
    DROP TABLE [ta]
    GO
    CREATE TABLE [ta] ([编号] [nvarchar](10),[单位1] [nvarchar](10),[单位2] [nvarchar](10),[单位1数量] [numeric](8,6),[单位2数量] [numeric](4,1))
    INSERT INTO [ta]
    SELECT 'A','KG','G','.810000','810.0' UNION ALL
    SELECT 'B','P','P','14.000000','4.0' UNION ALL
    SELECT 'C','P','P','14.000000','10.0' UNION ALL
    SELECT 'D','KG','G','.900000','900.0'
    -->SQL查询如下:
    SELECT * FROM [ta] WHERE CASE 单位1 WHEN 'KG' THEN 1000*[单位1数量] ELSE [单位1数量] END <> [单位2数量]
    /*
    编号         单位1        单位2        单位1数量                                   单位2数量
    ---------- ---------- ---------- --------------------------------------- ---------------------------------------
    B          P          P          14.000000                               4.0
    C          P          P          14.000000                               10.0(2 行受影响)
    */
      

  2.   

    上述仅供参考,单位不多可以用CASE 判断,但始终不是好办法,自己JOIN换算表吧。
      

  3.   

    单位暂且只换算几个常见的吧,kg和g的,M和mm的,因为我取的时候就没办法取出来系数了...
      

  4.   


    先多谢Tony兄,但是我刚疏忽了下,假如记录中存在A    KG    KG         8100          810.0
    这样情况的,你提供的方法就存在差异了
      

  5.   

    --> 生成测试数据表: [ta]
    IF OBJECT_ID('[ta]') IS NOT NULL
        DROP TABLE [ta]
    GO
    CREATE TABLE [ta] ([编号] [nvarchar](10),[单位1] [nvarchar](10),[单位2] [nvarchar](10),[单位1数量] [numeric](18,6),[单位2数量] [numeric](14,1))
    INSERT INTO [ta]
    SELECT 'A','KG','G','.810000','810.0' UNION ALL
    SELECT 'B','P','P','14.000000','4.0' UNION ALL
    SELECT 'C','P','P','14.000000','10.0' UNION ALL
    SELECT 'D','KG','G','.900000','900.0' UNION ALL
    SELECT 'A','KG','KG','8100','810'-->SQL查询如下:
    SELECT * FROM [ta] WHERE CASE WHEN 单位1='KG' AND 单位1<>单位2  THEN 1000*[单位1数量] ELSE [单位1数量] END <> [单位2数量]
    /*
    编号         单位1        单位2        单位1数量                                   单位2数量
    ---------- ---------- ---------- --------------------------------------- ---------------------------------------
    B          P          P          14.000000                               4.0
    C          P          P          14.000000                               10.0
    A          KG         KG         8100.000000                             810.0(3 行受影响)
    */
      

  6.   


    多谢帮忙,试了下可以,但是还有个问题,如果我的数据表是分成两个的
    也就是单位1和单位2如果不在一个表中,依靠编号连接的,需要怎么改呢?我比较笨...还得麻烦Tony兄表1
    编号    单位1   单位1数量
    A       KG     .810000
    B       P      14.000000
    C       P      14.000000
    D       KG     .900000表2
    编号      单位2     单位2数量
    A          G       810.0
    B          P       4.0
    C          P       10.0
    D          G       900.0