-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
那么,如何消除P,PRP和之间的歧义PU1
提前致谢。

4

7 回答 7

1

首先,不推荐存储日期和 P_QTY 之间的一对多关系。

要获得所需的结果,您的查询应该是

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

您只需要详细了解%(通配符 - 字符)

匹配任何零个或多个字符的字符串。此通配符可用作前缀或后缀。

这是你想要的:

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 = '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 回答
0

尝试这个:

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

看起来你的桌子坏了。把它变成第一范式。当每一行在列中只有一个组件时component,您的查询就变得微不足道了。

于 2013-01-10T05:48:32.840 回答
-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 回答