我也來試試看吧,
基本上我不建議欄位用中文,
建立資料表
IF OBJECT_ID('test.dbo.skill') IS NULL CREATE TABLE [test].[dbo].[skill]
( [skill] NVARCHAR(10) NOT NULL,
[member] NVARCHAR(10) NOT NULL);
新增資料
INSERT INTO [test].[dbo].[skill] ([skill], [member]) VALUES
(N'修電腦', 'B'), (N'修電腦', 'C'), (N'修手機', 'A'),
(N'修手機', 'C'), (N'修手機', 'D'), (N'修冷氣', 'A'),
(N'修冷氣', 'B'), (N'修冰箱', 'D'), (N'修電視', 'A'),
(N'修電視', 'C');
查詢資料
SELECT COUNT(1) AS num, [member] FROM [test].[dbo].[skill]
WHERE [skill] IN ('修手機', '修冰箱')
GROUP BY [member]
HAVING COUNT(1) >= 2;
查詢結果
其中IN後面的內容和數字2由後端產生
考量到目前資料庫的結構
跟後續可能會有更多同時會的技能要算
我應該會WHERE 技能 IN(技能1, 技能2)
抓出來之後
用程式分會技能的人物array
在去in_array()篩選
參考看看..
select 人員, count(*) skillcnt
from (
-- 選二項技能
SELECT 技能, 人員
FROM TableA
where 技能='修電腦'
union
SELECT 技能, 人員
FROM TableA
where 技能='修手機'
....
...
..
) AAA
group by 人員
having count(*) = 2
SELECT 人員,
STUFF((SELECT '. '+技能
FROM 人員TABLE AS B
WHERE B.人員=A.人員
FOR XML PATH(''),Type).value('.','NVARCHAR(MAX)'),1,2,'') AS 他會的技能
FROM 人員TABLE AS A
WHERE 技能 IN ('修電腦','修冰箱')
GROUP BY 人員
RESULTS.......一人一串,列出會修手機或修冰箱的,用in
'修冰箱','修電腦' 不行哦. 呵..
..
把上面那段做成檢視
CREATE VIEW [dbo].[vw_技能表]
as
SELECT 人員,
STUFF((SELECT '. '+技能
FROM 人員TABLE AS B
WHERE B.人員=A.人員
FOR XML PATH(''),Type).value('.','NVARCHAR(MAX)'),1,2,'') AS 他會的技能
FROM 人員TABLE AS A
GROUP BY 人員
GO
再查檢視,一定可以
select * from vw_技能表
where 他會的技能 like '%修手機%' and 他會的技能 like '%修冰箱%'
fuzzylee1688
樓主的表裡沒有人同時會修冰箱跟電腦耶!