Sql 使用子查询查询Select Id、名称、交货成本
我想做一个查询来选择Sql 使用子查询查询Select Id、名称、交货成本,sql,sql-server,Sql,Sql Server,我想做一个查询来选择客户id,客户名称,总COD订单。我做了这两个查询,但是这些查询分别计算COD和非COD。如何使用子查询进行单个查询 SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c INNER JOIN T_Inv_Order o ON c.id = o.cust_id WHERE c.type_id = 1 AND
客户id
,客户名称
,总COD订单
。我做了这两个查询,但是这些查询分别计算COD
和非COD
。如何使用子查询进行单个查询
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
GROUP BY o.cust_id, c.name;
由于查询似乎非常相似,您可以使用
联合
。因此,您的查询变成:
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
group by o.cust_id, c.name
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
group by o.cust_id, c.name
这将把两个查询合并成一个结果集。有关Union关键字的更多信息,请参阅。由于查询似乎非常相似,您可以使用
Union
。因此,您的查询变成:
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
group by o.cust_id, c.name
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
group by o.cust_id, c.name
这将把两个查询合并成一个结果集。有关Union关键字的更多信息,请参阅。由于查询似乎非常相似,您可以使用
Union
。因此,您的查询变成:
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
group by o.cust_id, c.name
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
group by o.cust_id, c.name
这将把两个查询合并成一个结果集。有关Union关键字的更多信息,请参阅。由于查询似乎非常相似,您可以使用
Union
。因此,您的查询变成:
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
group by o.cust_id, c.name
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
group by o.cust_id, c.name
这将把两个查询合并成一个结果集。有关Union关键字的更多信息,请参阅。只需使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
如果o.cod
仅接受值0和1,则可以使用快捷方式:
SELECT o.cust_id, UPPER(c.name),
SUM(o.cod = 1) as TotalCODOrders,
SUM(1 - o.cod) as TotalNonCODOrders,
只需使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
如果o.cod
仅接受值0和1,则可以使用快捷方式:
SELECT o.cust_id, UPPER(c.name),
SUM(o.cod = 1) as TotalCODOrders,
SUM(1 - o.cod) as TotalNonCODOrders,
只需使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
如果o.cod
仅接受值0和1,则可以使用快捷方式:
SELECT o.cust_id, UPPER(c.name),
SUM(o.cod = 1) as TotalCODOrders,
SUM(1 - o.cod) as TotalNonCODOrders,
只需使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
如果o.cod
仅接受值0和1,则可以使用快捷方式:
SELECT o.cust_id, UPPER(c.name),
SUM(o.cod = 1) as TotalCODOrders,
SUM(1 - o.cod) as TotalNonCODOrders,
使用联合
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
GROUP BY o.cust_id, c.name;
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
GROUP BY o.cust_id, c.name;
使用联合
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
GROUP BY o.cust_id, c.name;
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
GROUP BY o.cust_id, c.name;
使用联合
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
GROUP BY o.cust_id, c.name;
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
GROUP BY o.cust_id, c.name;
使用联合
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 1
GROUP BY o.cust_id, c.name;
UNION
SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders'
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1 AND o.cod = 0
GROUP BY o.cust_id, c.name;
使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
使用条件聚合:
SELECT o.cust_id, UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders,
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders
FROM T_Acct_CompanyProfile c INNER JOIN
T_Inv_Order o
ON c.id = o.cust_id
WHERE c.type_id = 1
GROUP BY o.cust_id, c.name;
SELECT o.cust_id,
UPPER(c.name),
SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders',
SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders'
FROM T_Acct_CompanyProfile c
INNER JOIN T_Inv_Order o ON c.id = o.cust_id
WHERE c.type_id = 1
group by o.cust_id, c.name
我会使用union all,因为你不想要一个独立的,我会添加
o.cod
来查看哪个计数是哪个计数,我会使用union all,因为你不想要一个独立的,我会添加o.cod
来查看哪个计数是哪个计数,我会添加o.cod
来查看哪个计数如果您不想使用union all,我会添加o.cod
,以便能够看到您在代码中尝试使用union all的计数,如您所述,但这会产生如下所示的错误:“Msg 8120,级别16,状态1,第1行'T_Inv_Order.cust_id'列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”。“我编辑了第一组,因为我不小心错过了它。您是否已在select的两个部分中使用group by进行了尝试?我正在按您所述的代码中尝试此操作,但这会产生如下所示的错误:“Msg 8120,级别16,状态1,第1行'T_Inv_Order.cust_id'列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”。“我编辑了第一组,因为我不小心错过了它。您是否已在select的两个部分中使用group by进行了尝试?我正在按您所述的代码中尝试此操作,但这会产生如下所示的错误:“Msg 8120,级别16,状态1,第1行'T_Inv_Order.cust_id'列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”。“我编辑了第一组,因为我不小心错过了它。您是否已在select的两个部分中使用group by进行了尝试?我正在按您所述的代码中尝试此操作,但这会产生如下所示的错误:“Msg 8120,级别16,状态1,第1行列'T_Inv_Order.cust_id'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”我进行了一次编辑,包括了第一个GROUP BY,因为我不小心漏掉了它。您在select的两个部分中都尝试过GROUP BY吗?”?