【发布时间】:2014-03-26 14:43:28
【问题描述】:
我对 SQL 很陌生,从“SAMS 24 小时内自学 SQL”一书中学习它。我关心的是连接和分组选择输出。这是我的表的结构:
CREATE TABLE ORDERS_TBL
( ORD_NUM VARCHAR(10) NOT NULL primary key,
CUST_ID VARCHAR(10) NOT NULL,
PROD_ID VARCHAR(10) NOT NULL,
QTY INTEGER NOT NULL,
ORD_DATE DATE );
CREATE TABLE PRODUCTS_TBL
( PROD_ID VARCHAR(10) NOT NULL primary key,
PROD_DESC VARCHAR(40) NOT NULL,
COST DECIMAL(6,2) NOT NULL );
我想要实现的是按我的 PROD_ID 分组的加入操作。
SELECT P.PROD_DESC, SUM(O.QTY)
FROM PRODUCTS_TBL AS P LEFT JOIN ORDERS_TBL AS O
ON P.PROD_ID = O.PROD_ID
GROUP BY P.PROD_ID
ORDER BY P.PROD_ID;
上面的查询确实适用于 MySQL,但不适用于我的 MS SQL 环境。什么有用但很烦人,因为我不想在我的输出中看到 PROD_ID。
SELECT P.PROD_ID, P.PROD_DESC, SUM(O.QTY)
FROM PROCUCTS_TBL AS P LEFT JOIN ORDERS_TBL AS O
ON P.PROD_ID = O.PROD_ID
GROUP BY P.PROD_ID, P.PROD_DESC
ORDER BY P.PROD_ID;
关于如何获得带有 PROD_DESC 的输出表的任何提示,PROD_ID 的数量和组的总和?
【问题讨论】:
-
附带说明,我从来不理解人们对帽子的迷恋。感觉就像代码使您的眼睛大打出手。我的意思是确定在 1957 年你有 Fortran 需要它,但在 2014 年?
-
为我工作,抱歉我试过了,我对你想做的事情没有任何问题。加上你没有给我们编译错误
-
我在表格中使用了小写字母,但这个示例已经准备好与所有大写字母一起使用。你说得对,这里读起来有点难。
-
您的 mysql 查询是 mysql 和其他主要数据库都不允许的一种糟糕的技术。你也不应该在 mysql 中使用它,因为结果可能不一致。您需要学会在所有数据库中正确地进行聚合,而不是使用愚蠢地允许 mysql 存在的错误快捷方式。
标签: sql sql-server group-by