-1

私は1つのテーブルを持っており、 Componentというフィールドが含まれています。データは-

date             component
----------------------------
2012/12/11       PRP,PU1,P
2012/12/12       PRP 

このような結果を得たい-

date          P_QTY
-----------------------
2012/12/11    1

クエリを試してみます-

select date,count(date) as P_Qty    
from MyTable 
where component like '%P%'
group by date 

しかし、私は結果を得る-

date          P_QTY
-----------------------
2012/12/11    1
2012/12/12    1

との間にはあいまいさがPRPありPます。では、と
の間のあいまいさをどのように取り除くことができますか? 前もって感謝します。PPRPPU1

4

7 に答える 7

1

まず、日付とP_QTYの間の1対多の関係を保存するための推奨される方法ではありません。

目的の結果を得るには、クエリは次のようになります。

SELECT date,count(date) as P_Qty    
FROM MyTable
where 
    (
        component = 'P' OR 
        component LIKE 'P,%' OR 
        component LIKE '%,P,%' OR 
        component LIKE '%,P'
    )
GROUP BY date
于 2013-01-10T05:38:51.637 に答える
1

%(ワイルドカード-文字)を詳細に理解する必要があります。

0文字以上の任意の文字列に一致します。このワイルドカード文字は、プレフィックスまたはサフィックスとして使用できます。

これがあなたが望むものです:

select date,count(date) as P_Qty    
from MyTable 
where component like '%,P%'
group by date

デモSQLFiddle

于 2013-01-10T05:42:28.793 に答える
0

これを試して:

select date,count(date) as P_Qty    
from MyTable 
where ',' + component + ',' like '%,P,%'
group by date 
于 2013-01-10T05:38:18.223 に答える
0

これはあなたが求めているものです:

select date,count(date) as P_Qty    
from MyTable 
where component = 'P' OR CHARINDEX(',P,', component) > 0  OR
      LEFT(component, 2) = 'P,' OR RIGHT(component,2) = ',P'
group by date 

同じことが他の値にも当てはまります。LEFT関数とRIGHT関数の整数値を変更することを忘れないでください。テストする必要のある変数を導入することもできます。この場合、LEFT関数とRIGHT関数の整数値は、この変数のLEN()になります。

于 2013-01-10T05:45:05.200 に答える
0

してみてください:

select date,count(date) as P_Qty    
from MyTable 
where REPLACE(',' + component + ',', ' ', '') like '%,P,%'
group by date 
于 2013-01-10T05:48:46.243 に答える
-1
SELECT DATE,COUNT(*) AS P_QTY 
FROM MYTABLE
WHERE INSTR(COMPONENT,'PU1',1,1)>0
GROUP BY DATE
于 2013-01-10T06:02:01.890 に答える
-1

テーブルが壊れているようです。第一正規形にします。各行の列にコンポーネントが1つしかない場合component、クエリは簡単になります。

于 2013-01-10T05:48:32.840 に答える