0

クエリに問題があり、誰かが助けてくれることを望んでいました. 解決策を探してみましたが、検索用語で同様のシナリオが見つからないようです。

これが私が探しているものです:

3 つの列を持つテーブルがあり、最初の列に値を返し、2 番目の列に値の 2 つのカウントを返す必要があります。1 つのカウントはパラメーターに基づいており、もう 1 つは合計カウントです。理想的には、同じカウントを持つ列 1 の値のみを返したいと思います。

例えば:

Part Number | Make ID
ABC123      | 1<br>
ABC123      | 1<br>
ABC123      | 3<br>
DEF456      | 1<br>
DEF456      | 1

Part Number | Count of Apps Where Make ID = 1| Count of Total Apps
ABC123      |                              2 | 3
DEF456      |                              2 | 2

これまでのクエリは、パラメーター値を持つ部品番号のアプリの合計数を返しますが、両方の数を返す必要があります。

SELECT apps.part#, 
       COUNT(DISTINCT application#)apps 
FROM   [mytable] AS apps 
       INNER JOIN (SELECT part# 
                   FROM   [mytable] 
                   WHERE  make = '1') AS sz 
               ON sz.part# = apps.part# 
GROUP  BY apps.part# 
ORDER  BY 1 

どんな助けでも大歓迎です!

みんな、ありがとう!私はいくつかの正解を受け取り、最初に与えられたものを選択しました。

SELECT part#, 
       COUNT(DISTINCT CASE WHEN make = '1' THEN application# END) make1_apps,
       COUNT(DISTINCT application#) total_apps
FROM   [mytable]
GROUP  BY part#
HAVING COUNT(DISTINCT CASE WHEN make = '1' THEN application# END)
     = COUNT(DISTINCT application#)
ORDER  BY part#

再度、感謝します!

4

4 に答える 4

5

これを試して:

SELECT
    apps.part#
,   COUNT(*)
,   SUM(CASE WHEN make = '1' THEN 1 ELSE 0 END)
FROM [mytable]
GROUP BY apps.part#

このソリューションは、カウントを合計の計算に置き換え1、一致するアイテムと一致0しないアイテムを提供します。

2つのカウントが異なるレコードを除外するには、次のHAVING句を追加します。

SELECT
    apps.part#
,   COUNT(*)
,   SUM(CASE WHEN make = '1' THEN 1 ELSE 0 END)
FROM [mytable]
GROUP BY apps.part#
HAVING SUM(CASE WHEN make = '1' THEN 1 ELSE 0 END) = COUNT(*)
于 2012-11-15T14:11:38.797 に答える
4
SELECT [Part Number],
       SUM(CASE WHEN [Make ID] = 1 THEN 1 ELSE 0 END),
       COUNT(*)
FROM tableName
GROUP BY [Part Number]

更新1

SELECT [Part Number],
       SUM(CASE WHEN [Make ID] = 1 THEN 1 ELSE 0 END),
       COUNT(*)
FROM tableName
GROUP BY [Part Number]
HAVING SUM(CASE WHEN [Make ID] = 1 THEN 1 ELSE 0 END) = COUNT(*)
于 2012-11-15T14:11:57.020 に答える
2

あなたに似た別の方法:

select d.[Part Number], count(d.[Part Number]), o.ones
from
  data d
cross apply
(
  select count(*)
  from data d2
  where d2.[Part Number] = d.[Part Number]
      and d2.[Make ID] = 1
) o (ones)
group by d.[Part Number],  o.ones

SQLフィドル

2 番目の要求を満たすには、次を追加します。

having count(d.[Part Number]) = o.ones
于 2012-11-15T14:15:53.563 に答える
1
SELECT part#, 
       COUNT(DISTINCT CASE WHEN make = '1' THEN application# END) make1_apps,
       COUNT(DISTINCT application#) total_apps
FROM   [mytable]
GROUP  BY part#
HAVING COUNT(DISTINCT CASE WHEN make = '1' THEN application# END)
     = COUNT(DISTINCT application#)
ORDER  BY part#; 

HAVING 句により、2 つのカウントが一致することが保証されます。

于 2012-11-15T14:17:29.347 に答える