我很確定這是一個簡單的問題,但我無法對其進行表述。用另一列中的多個值計算一列中的不同記錄
我需要根據另一列中的不同條件計算一列中值的總數。
實施例:
A CD
B ABC
C AD
D A
將產生:
A 3
B 1
C 2
D 2
我很確定這是一個簡單的問題,但我無法對其進行表述。用另一列中的多個值計算一列中的不同記錄
我需要根據另一列中的不同條件計算一列中值的總數。
實施例:
A CD
B ABC
C AD
D A
將產生:
A 3
B 1
C 2
D 2
首先,你應該不會在這裏存放的東西列出一個字符串。
但是,有時候會有一種卡住這種格式。在你的例子中,你似乎有一張包含所有可能值的表格。如果是這樣,你可以使用一個join
:
select e.col1, count(e2.col2)
from example e left join
example e2
on charindex(e.col1, e2.col2) > 0
group by e.col1;
注:此計算包含的值,而行。如果單個行中出現多個值,則查詢會更復雜一些。
計數時,使用一個相關子查詢。使用LIKE
查找行以查找要計數的行。
select t1.col1, (select count(*) from tablename t2
where t2.col2 like '%' || t1.col1 ||'%')
from tablename t1
||
是ANSI SQL連接。有些產品使用concat()
或+
。
假設表稱爲yourtable,字段類似於soo。
fielda fieldb
A CD
B ABC
C AD
D A
代碼
SELECT a.fielda, (SELECT COUNT(b.fieldb)
FROM yourtable b
WHERE b.fieldb LIKE '%a.fielda%' AND b.fielda = a.fielda) AS counter
FROM yourtable a
您可以使用相關子查詢與LIKE
樣本數據
with cte(a,b) as
(
select 'A','CD'
union all select 'B','ABC'
union all select'C','AD'
union all select'D','A'
)
查詢
select a,(select count(*) from cte c2 where b like '%' + c1.a +'%')
from cte c1
group by a
輸出
A 3
B 1
C 2
D 2
這不會考慮'AABC'兩次。它會將「A」計爲1. –
@GiorgiNakeuri - 是的,你是正確的,但不知道這是否需要。 – ughai
看起來像你需要一個自連接有但訣竅是對加入,而使用模式匹配比同等加入...
create table x1(c1 char(1) primary key, c2 varchar(5) not null);
select x1.c1, count(*)
from x1 x1
join x1 x2 on x2.c2 like '%' || x1.c1 || '%'
group by x1.c1
order by 1;
這裏是你如何能做到這:
DECLARE @t TABLE (c1 CHAR(1), c2 VARCHAR(5))
INSERT INTO @t
VALUES ('A', 'CD'),
('B', 'ABC'),
('C', 'AD'),
('D', 'A')
SELECT t.c1 ,
SUM(count) AS count
FROM @t t
CROSS APPLY (SELECT LEN(c2) - LEN(REPLACE(c2, t.c1, '')) AS count
FROM @t
WHERE c2 LIKE '%' + t.c1 + '%'
) ca
GROUP BY t.c1
我想你的答案是一般情況下最準確的答案。 –
第二列的數據類型是什麼? –
兩者都是varchar。 – Chad