SELECT DISTINCT A.[客户号],B.[客户名称],A.[规格],A.[轻瓶数量],A.[重瓶数量],A.[轻瓶重量],A.[重瓶重量],A.[瓶重误差],A.[核对结果] FROM
(SELECT Convert(Char(10),ISNULL(轻瓶重量.客户号, 重瓶重量.客户号))AS 客户号,int_guest,轻瓶重量.规格 as 规格,轻瓶重量.瓶数 AS 轻瓶数量,
重瓶重量.瓶数 AS 重瓶数量,轻瓶重量.重量 AS 轻瓶重量,重瓶重量.重量 AS 重瓶重量,Convert(decimal(18,2),
(重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100) AS 瓶重误差, CASE WHEN isnull(轻瓶重量.瓶数, 0) = isnull(重瓶重量.瓶数, 0) and
abs((重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100)<=0 THEN '√' ELSE '' END AS 核对结果 FROM
(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,int_guest,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_ZZ))AS 重量 FROM [GZ_TABLE] WHERE (INT_SCALE IN (9)) AND (RECORD_DATA BETWEEN
CONVERT(DATETIME, '2008-6-5 0:00:00', 102) AND CONVERT(DATETIME,'2008-6-6 0:00:00', 102))GROUP BY INT_GUEST,STR_BOTTLESORT,
convert(char(10),record_data,120)) 轻瓶重量 --轻瓶重量
FULL OUTER JOIN(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_pz))AS 重量 FROM [GZ_TABLE] WHERE(INT_scale not IN (9))AND(RECORD_DATA BETWEEN
CONVERT(DATETIME,'2008-6-5 0:00:00', 102) AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102))
GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120)) 重瓶重量 --重瓶重量
ON 轻瓶重量.客户号 = 重瓶重量.客户号 and 轻瓶重量.规格=重瓶重量.规格 and 轻瓶重量.日期=重瓶重量.日期)A inner join
(select A.FullName as 客户名称,B.int_guest from Client_Info A inner join GZ_Table B on convert(int,A.Client_ID)= B.int_guest where
convert(int,Client_ID)= B.int_guest and A.Del_Flag=0)B on A.int_guest=B.int_guest where 轻瓶数量>0
UNION ALL -- 合计
SELECT null,'合计',null,
SUM([轻瓶数量]), SUM([重瓶数量]), SUM([轻瓶重量]), SUM([重瓶重量]),convert(decimal(18,2),avg([瓶重误差])),CASE WHEN
isnull(SUM([轻瓶数量]), 0)=isnull(SUM([重瓶数量]),0) and abs(avg(瓶重误差))<=0 THEN '√' ELSE '' END AS [核对结果] FROM
(SELECT Convert(Char(10),ISNULL(轻瓶重量.客户号, 重瓶重量.客户号))AS 客户号,int_guest,轻瓶重量.规格 as 规格,轻瓶重量.瓶数 AS 轻瓶数量,
重瓶重量.瓶数 AS 重瓶数量,轻瓶重量.重量 AS 轻瓶重量,重瓶重量.重量 AS 重瓶重量,Convert(decimal(18,2),
(重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100) AS 瓶重误差, CASE WHEN isnull(轻瓶重量.瓶数, 0) = isnull(重瓶重量.瓶数, 0) and
abs((重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100)<=0 THEN '√' ELSE '' END AS 核对结果 FROM
(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,int_guest,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_ZZ)) AS 重量 FROM [GZ_TABLE] WHERE (INT_SCALE IN (9)) AND (RECORD_DATA BETWEEN CONVERT(DATETIME,
'2008-6-5 0:00:00', 102)AND CONVERT(DATETIME,'2008-6-6 0:00:00',102))GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120))
轻瓶重量 FULL OUTER JOIN
(SELECT convert(char(10),record_data,120)as 日期,INT_GUEST AS 客户号,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数, SUM(Convert(decimal(18,2),
FLOAT_pz)) AS 重量 FROM [GZ_TABLE] WHERE (INT_scale not IN (9)) AND (RECORD_DATA BETWEEN CONVERT(DATETIME, '2008-6-5 0:00:00', 102)
AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102)) GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120))重瓶重量 ON
轻瓶重量.客户号 = 重瓶重量.客户号 and 轻瓶重量.规格=重瓶重量.规格 and 轻瓶重量.日期=重瓶重量.日期) AS t2 where 轻瓶数量>0现在此语句执行起来速度太慢 严重影响了性能 希望SQL语句高手能简而化之..
(SELECT Convert(Char(10),ISNULL(轻瓶重量.客户号, 重瓶重量.客户号))AS 客户号,int_guest,轻瓶重量.规格 as 规格,轻瓶重量.瓶数 AS 轻瓶数量,
重瓶重量.瓶数 AS 重瓶数量,轻瓶重量.重量 AS 轻瓶重量,重瓶重量.重量 AS 重瓶重量,Convert(decimal(18,2),
(重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100) AS 瓶重误差, CASE WHEN isnull(轻瓶重量.瓶数, 0) = isnull(重瓶重量.瓶数, 0) and
abs((重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100)<=0 THEN '√' ELSE '' END AS 核对结果 FROM
(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,int_guest,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_ZZ))AS 重量 FROM [GZ_TABLE] WHERE (INT_SCALE IN (9)) AND (RECORD_DATA BETWEEN
CONVERT(DATETIME, '2008-6-5 0:00:00', 102) AND CONVERT(DATETIME,'2008-6-6 0:00:00', 102))GROUP BY INT_GUEST,STR_BOTTLESORT,
convert(char(10),record_data,120)) 轻瓶重量 --轻瓶重量
FULL OUTER JOIN(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_pz))AS 重量 FROM [GZ_TABLE] WHERE(INT_scale not IN (9))AND(RECORD_DATA BETWEEN
CONVERT(DATETIME,'2008-6-5 0:00:00', 102) AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102))
GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120)) 重瓶重量 --重瓶重量
ON 轻瓶重量.客户号 = 重瓶重量.客户号 and 轻瓶重量.规格=重瓶重量.规格 and 轻瓶重量.日期=重瓶重量.日期)A inner join
(select A.FullName as 客户名称,B.int_guest from Client_Info A inner join GZ_Table B on convert(int,A.Client_ID)= B.int_guest where
convert(int,Client_ID)= B.int_guest and A.Del_Flag=0)B on A.int_guest=B.int_guest where 轻瓶数量>0
UNION ALL -- 合计
SELECT null,'合计',null,
SUM([轻瓶数量]), SUM([重瓶数量]), SUM([轻瓶重量]), SUM([重瓶重量]),convert(decimal(18,2),avg([瓶重误差])),CASE WHEN
isnull(SUM([轻瓶数量]), 0)=isnull(SUM([重瓶数量]),0) and abs(avg(瓶重误差))<=0 THEN '√' ELSE '' END AS [核对结果] FROM
(SELECT Convert(Char(10),ISNULL(轻瓶重量.客户号, 重瓶重量.客户号))AS 客户号,int_guest,轻瓶重量.规格 as 规格,轻瓶重量.瓶数 AS 轻瓶数量,
重瓶重量.瓶数 AS 重瓶数量,轻瓶重量.重量 AS 轻瓶重量,重瓶重量.重量 AS 重瓶重量,Convert(decimal(18,2),
(重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100) AS 瓶重误差, CASE WHEN isnull(轻瓶重量.瓶数, 0) = isnull(重瓶重量.瓶数, 0) and
abs((重瓶重量.重量 - 轻瓶重量.重量)/ 轻瓶重量.重量*100)<=0 THEN '√' ELSE '' END AS 核对结果 FROM
(SELECT convert(char(10),record_data,120) as 日期,INT_GUEST AS 客户号,int_guest,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数,
SUM(Convert(decimal(18,2),FLOAT_ZZ)) AS 重量 FROM [GZ_TABLE] WHERE (INT_SCALE IN (9)) AND (RECORD_DATA BETWEEN CONVERT(DATETIME,
'2008-6-5 0:00:00', 102)AND CONVERT(DATETIME,'2008-6-6 0:00:00',102))GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120))
轻瓶重量 FULL OUTER JOIN
(SELECT convert(char(10),record_data,120)as 日期,INT_GUEST AS 客户号,STR_BOTTLESORT as 规格,COUNT(*) AS 瓶数, SUM(Convert(decimal(18,2),
FLOAT_pz)) AS 重量 FROM [GZ_TABLE] WHERE (INT_scale not IN (9)) AND (RECORD_DATA BETWEEN CONVERT(DATETIME, '2008-6-5 0:00:00', 102)
AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102)) GROUP BY INT_GUEST,STR_BOTTLESORT,convert(char(10),record_data,120))重瓶重量 ON
轻瓶重量.客户号 = 重瓶重量.客户号 and 轻瓶重量.规格=重瓶重量.规格 and 轻瓶重量.日期=重瓶重量.日期) AS t2 where 轻瓶数量>0现在此语句执行起来速度太慢 严重影响了性能 希望SQL语句高手能简而化之..
需要查询出来的就是[客户号],[客户名称],[规格],[轻瓶数量],[重瓶数量],[轻瓶重量],[重瓶重量],[瓶重误差],[核对结果],具体取值可参考上面的语句,功能是实现了.可是在程序里面运行得太慢了
CREATE TABLE [GZ_TABLE] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[INT_SCALE] [int] NULL ,
[STATE_ZERO] [int] NULL ,
[STATE_ONE] [int] NULL ,
[STATE_TWO] [int] NULL ,
[STATE_SIX] [int] NULL ,
[STATE_SEVEN] [int] NULL ,
[INT_STAFF] [int] NULL ,
[INT_ZUOBI] [int] NULL ,
[INT_GUEST] [int] NULL , --客户ID
[INT_BOTTLENUM] [int] NULL ,
[STR_SITE] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[RECORD_DATA] [datetime] NULL ,
[PLAN_POINT_NUM] [int] NULL ,
[STR_BOTTLESORT] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[STR_GUESTNAME] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FLOAT_JZ] [numeric](18, 5) NULL ,
[FLOAT_ZZ] [numeric](18, 5) NULL ,
[PLAN_WEIGHT] [numeric](9, 2) NULL ,
[FLOAT_PZ] [numeric](18, 5) NULL ,
[PLAN_POINT_SORT] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[DoMain_ID] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [Client_Info] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Domain_ID] [varchar] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Client_ID] [varchar] (8) COLLATE Chinese_PRC_CI_AS NOT NULL , --客户ID
[Area] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[FullName] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL , --客户名称
[ShortName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Address] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Tel] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ClientType] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Grade] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[AccountDay] [int] NULL ,
[Pym] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL ,
[CardNo] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[IssueDate] [datetime] NULL ,
[Lose_Flag] [bit] NULL ,
[Publisher] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Del_Flag] [bit] NOT NULL CONSTRAINT [DF_Client_Info_Del_Flag] DEFAULT (0),
[DBUpdate] [varchar] (1) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_Client_Info_DBUpdate] DEFAULT (1),
[payoff_Type] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[PUG_Type] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
(
SELECT INT_GUEST 客户号,STR_BOTTLESORT as 规格,SUM(CASE WHEN INT_SCALE IN (9) THEN 1 ELSE 0 END ) AS 轻瓶数量,SUM(CASE WHEN INT_SCALE IN (9) THEN 0 ELSE 1 END ) AS 重瓶数量,SUM(CASE WHEN INT_SCALE IN (9) THEN Convert(decimal(18,2),FLOAT_ZZ) ELSE 0 END ) AS 轻瓶重量 ,SUM(CASE WHEN INT_SCALE IN (9) THEN 0 ELSE Convert(decimal(18,2),FLOAT_ZZ) END ) AS 重瓶重量 FROM [GZ_TABLE] WHERE (RECORD_DATA BETWEEN CONVERT(DATETIME, '2008-6-5 0:00:00', 102) AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102)) GROUP BY INT_GUEST,STR_BOTTLESORT WITH ROLLUP
HAVING GROUPING(STR_BOTTLESORT) = 0 OR GROUPING(INT_GUEST) = 1
) B LEFT JOIN Client_Info A ON convert(int,A.Client_ID)= B.客户号
WHERE 轻瓶数量>0
(
SELECT INT_GUEST 客户号,STR_BOTTLESORT as 规格,SUM(CASE WHEN INT_SCALE IN (9) THEN 1 ELSE 0 END ) AS 轻瓶数量,SUM(CASE WHEN INT_SCALE NOT IN (9) THEN 0 ELSE 1 END ) AS 重瓶数量,SUM(CASE WHEN INT_SCALE IN (9) THEN Convert(decimal(18,2),FLOAT_ZZ) ELSE 0 END ) AS 轻瓶重量 ,SUM(CASE WHEN INT_SCALE NOT IN (9) THEN 0 ELSE Convert(decimal(18,2),FLOAT_ZZ) END ) AS 重瓶重量 FROM [GZ_TABLE] WHERE (RECORD_DATA BETWEEN CONVERT(DATETIME, '2008-6-5 0:00:00', 102) AND CONVERT(DATETIME, '2008-6-6 0:00:00', 102)) GROUP BY INT_GUEST,STR_BOTTLESORT WITH ROLLUP
HAVING GROUPING(STR_BOTTLESORT) = 0 OR GROUPING(INT_GUEST) = 1
) B LEFT JOIN Client_Info A ON convert(int,A.Client_ID)= B.客户号
WHERE 轻瓶数量>0 结贴咯~!