又是一个简单SQL语句问题`怎么也过不去了`请帮忙~(50分)

  • 主题发起人 主题发起人 xebaobei
  • 开始时间 开始时间
X

xebaobei

Unregistered / Unconfirmed
GUEST, unregistred user!
SELECT 名称, 物品编号, SUM(数量) AS 数量, 价格, 数量 * 价格 AS 总金额, 用户级别
FROM (SELECT 名称, 物品编号, 数量, 价格, 价格 * 数量 AS 总金额, 用户级别, 日期
FROM (SELECT 历史表.名称, 历史表.物品编号, SUM(历史表.数量) AS 数量,
密码表.用户级别, AVG(历史表.价格) AS 价格,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日' AS 日期
FROM 历史表 INNER JOIN
密码表 ON 历史表.操作员 = 密码表.真实姓名
WHERE (历史表.名称 IN
(SELECT 品名
FROM z库存物品表))
GROUP BY 历史表.名称, 历史表.物品编号, 密码表.用户级别,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日'
UNION ALL
SELECT 历史表.名称, 历史表.物品编号, SUM(历史表.数量) AS 数量,
密码表.用户级别, AVG(历史表.价格) AS 价格,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日' AS 日期
FROM 历史表 INNER JOIN
密码表 ON 历史表.操作员 = 密码表.真实姓名
WHERE (历史表.名称 IN
(SELECT 菜名
FROM z菜品配料))
GROUP BY 历史表.名称, 历史表.物品编号, 密码表.用户级别,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2) + '日')
DERIVEDTBL) DERIVEDTBL
WHERE (日期 >= '2003年08月01日') AND (日期 <= '2003年09月13日') AND
(用户级别 = '经理')
GROUP BY 名称, 物品编号, 价格, 用户级别, 数量
ORDER BY 用户级别, 物品编号


上边语句的结果是
名称 物品编号 数量 价格 总金额 用户级别
鸳鸯锅 101 1 20 20 经理
鸳鸯锅 101 3 20 60 经理
花河啤酒 901 5 2.5 12.5 经理
花河啤酒 901 8 2.5 20 经理
花河啤酒 901 295 2.5 737.5 经理

上边我明明 SUM(数量) AS 数量 了~但是结果还是没有求和
我知道是因为我后边
GROUP BY 名称, 物品编号, 价格, 用户级别, 数量
有个数量~
数量不一样的分组~
但是我也不想要那个group by 数量
因为一拿下去就出错误了~
说数量不包含在聚合函数中
谢谢了`
SQLSERVER 2000
 
我想要的结果
名称 物品编号 数量 价格 总金额 用户级别
鸳鸯锅 101 4 20 80 经理
花河啤酒 901 308 2.5 770 经理
 
第一次看到这么庞大的sql语句
 
在ORACLEK中,这种求和的字段是不能包含在GROUP子句中的,不知SQL SERVER 2000中为何会出错,改成"SUM(数量) AS 数量1"试试呢。 
 
不会的`
我找到毛病了`
因为我SUM(数量)后边又写了个 数量 * 价格 AS 总金额
所以出错`

对的是这样的
--------------------------------------------------------------------------------
SELECT 名称, 物品编号, SUM(数量) AS 数量, 价格, SUM(总金额) AS 总金额, 用户级别
FROM (SELECT 名称, 物品编号, 数量, 价格, 价格 * 数量 AS 总金额, 用户级别, 日期
FROM (SELECT 历史表.名称, 历史表.物品编号, SUM(历史表.数量) AS 数量,
密码表.用户级别, AVG(历史表.价格) AS 价格,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日' AS 日期
FROM 历史表 INNER JOIN
密码表 ON 历史表.操作员 = 密码表.真实姓名
WHERE (历史表.名称 IN
(SELECT 品名
FROM z库存物品表))
GROUP BY 历史表.名称, 历史表.物品编号, 密码表.用户级别,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日'
UNION ALL
SELECT 历史表.名称, 历史表.物品编号, SUM(历史表.数量) AS 数量,
密码表.用户级别, AVG(历史表.价格) AS 价格,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2)
+ '日' AS 日期
FROM 历史表 INNER JOIN
密码表 ON 历史表.操作员 = 密码表.真实姓名
WHERE (历史表.名称 IN
(SELECT 菜名
FROM z菜品配料))
GROUP BY 历史表.名称, 历史表.物品编号, 密码表.用户级别,
SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 1, 4)
+ '年' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 6, 2)
+ '月' + SUBSTRING(CONVERT(varchar, 历史表.日期, 120), 9, 2) + '日')
DERIVEDTBL) 综合汇总
WHERE (日期 >= '2003年08月01日') AND (日期 <= '2003年09月13日') AND
(用户级别 = '经理')
GROUP BY 名称, 物品编号, 价格, 用户级别
ORDER BY 用户级别, 物品编号
-------------------------------------------------------------------------------
这个不是大的`
我们用的最大的一个汇总的SQL语句~
7000多字`
那才真晕啊~
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
后退
顶部