Kal*_*ale 1 sql sql-server group-by
我对SQL非常陌生,并且从"SAMS Teach Yourself SQL in 24 hours"一书中学到了它.我关心的是连接和分组选择输出.这是我的表的结构:
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 );
Run Code Online (Sandbox Code Playgroud)
我想要实现的是通过我的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;
Run Code Online (Sandbox Code Playgroud)
上面的查询适用于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;
Run Code Online (Sandbox Code Playgroud)
有关如何使用PROD_DESC获取输出表的任何提示,PROD_ID的数量和组的总和?
在TSQL中,你不能选择一个不包含在group by子句中的列(永远不能理解为什么在mysql中你可以因为它没有意义恕我直言)
一个肮脏的技巧是选择具有min()或max()类似功能(根据您的需要)只有一个未聚合的列行.
SELECT max( 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;
Run Code Online (Sandbox Code Playgroud)
无论如何,如果P.PROD_DESC列是相同的,最好将它包含在Group by子句中,或者如果你想要所有不同的P.PROD_ID,P.PROD_DESC行
| 归档时间: |
|
| 查看次数: |
11773 次 |
| 最近记录: |