0

2 つのクエリを 1 つに結合する方法に苦労しています (明らかに、私は SQL の第一人者ではありません ;))

SELECT COUNT(orderid) AS TotalAmountOfOrders
FROM tableorder
WHERE (YEAR(orderDate) BETWEEN 2012 AND 2012)


SELECT COUNT(errorid) AS AmountOfErrorsOnOrders
FROM  tableError                      
WHERE (YEAR(errorDate) BETWEEN 2012 AND 2012)

問題は、それらを次のように追加するだけの場合です

SELECT COUNT(orderid) AS ...,COUNT(errorid) AS ...
From tableorder inner join tableError

合計金額を取得していませんが、エラーのある注文の金額のみを取得しています。これは、それらをまとめる方法が原因です。

では、1 つのクエリで両方のカウントを取得するにはどうすればよいでしょうか。

4

3 に答える 3

3

あなたはUNIONとしてそれを行うことができます:

SELECT COUNT(orderid) AS counted
FROM tableorder
WHERE (YEAR(orderDate) BETWEEN 2012 AND 2012)

UNION

SELECT COUNT(errorid) AS counted
FROM  tableError                      
WHERE (YEAR(errorDate) BETWEEN @Year1 AND @Year2)
GROUP BY SurName, FirstName;

次に、最初の行はtableorderからのカウントになり、2番目の行はtableErrorからのカウントになります。

于 2012-04-17T07:30:07.563 に答える
0

これにより、値が2つの列として返されます。

SELECT 
  (
    SELECT COUNT(orderid)
    FROM tableorder
    WHERE (YEAR(orderDate) BETWEEN 2012 AND 2012)
  ) AS TotalAmountOfOrders,
  (
    SELECT COUNT(errorid)
    FROM  tableError                      
    WHERE (YEAR(errorDate) BETWEEN 2012 AND 2012)
  ) AS AmountOfErrorsOnOrders

列に関数を適用するのではなく、間隔に対して日付を確認することをお勧めします。

SELECT 
  (
    SELECT COUNT(orderid)
    FROM tableorder
    WHERE orderDate >=  '20120101' AND OrderDate < '20130101'
  ) AS TotalAmountOfOrders,
  (
    SELECT COUNT(errorid)
    FROM  tableError                      
    WHERE errorDate >=  '20120101' AND errorDate < '20130101'
  ) AS AmountOfErrorsOnOrders

SQLステートメントを引数可能にする理由は何ですか?

于 2012-04-17T07:31:02.070 に答える
0

これを試して:

SELECT COUNT(o.orderid), COUNT(e.errorid) AS TotalAmountOfOrders 
FROM tableorder o
INNER JOIN tableError e ON o.orderid = e.orderid
WHERE (YEAR(o.orderDate) BETWEEN 2012 AND 2012)
AND   (YEAR(e.errorDate) BETWEEN 2012 AND 2012)
GROUP BY o.orderid
于 2012-04-17T07:31:14.493 に答える