Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用子查询查询Select Id、名称、交货成本_Sql_Sql Server - Fatal编程技术网

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吗?”?