编号 单位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记录的数量就是一致的,不知道如何写这个查询,麻烦各位大侠指点,谢谢!
---------------------------------------------------------------------------------- -- 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 行受影响) */
上述仅供参考,单位不多可以用CASE 判断,但始终不是好办法,自己JOIN换算表吧。
单位暂且只换算几个常见的吧,kg和g的,M和mm的,因为我取的时候就没办法取出来系数了...
先多谢Tony兄,但是我刚疏忽了下,假如记录中存在A KG KG 8100 810.0 这样情况的,你提供的方法就存在差异了
--> 生成测试数据表: [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 行受影响) */
多谢帮忙,试了下可以,但是还有个问题,如果我的数据表是分成两个的 也就是单位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
-- 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 行受影响)
*/
先多谢Tony兄,但是我刚疏忽了下,假如记录中存在A KG KG 8100 810.0
这样情况的,你提供的方法就存在差异了
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 行受影响)
*/
多谢帮忙,试了下可以,但是还有个问题,如果我的数据表是分成两个的
也就是单位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