TRYはTHIS:それは本当に退屈が、ユニークな要件だと、私はこれを達成するために考えて、私たちは
1-機能がへのservice_id
2-機能の明確な数を返す関数を使用する必要がありますカンマ区切りの値を分割してテーブル形式で返す
- ファンクションはservice_idの別個のカウントを返します
からコピー
CREATE FUNCTION [dbo].[getCount](@service_id varchar(500))
RETURNS INT
AS
BEGIN
DECLARE @count int
SELECT @count = COUNT(DISTINCT(t.service_id))
FROM tmptos t
INNER JOIN [dbo].[SplitValue](@service_id, ',') tt on t.service_id = tt.items
RETURN @count
END;
表形式で
--functionカンマ区切り値を分割して返すように --function - separate comma separated values and store in table in sql server
CREATE FUNCTION [dbo].[SplitValue](@String varchar(MAX), @Delimiter char(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
DECLARE @idx int
DECLARE @slice varchar(8000)
SELECT @idx = 1
if len(@String)<1 or @String is null return
WHILE @idx!= 0
BEGIN
set @idx = charindex(@Delimiter,@String)
IF @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
IF(LEN(@slice)>0)
INSERT INTO @temptable(Items) values(@slice)
SET @String = right(@String,len(@String) - @idx)
IF LEN(@String) = 0 break
END
RETURN
END;
--Table with Sample Data
create table tmptos(id int, Service_id int, bawe_id int)
insert into tmptos values
(1, 2, 2),
(2, 3, 3),
(3, 2, 3)
declare @service_id varchar(50) = '2,3'
select *
from tmptos t
inner join [dbo].[SplitValue](@service_id, ',') tt on t.Service_id = tt.items
where [dbo].[getCount](@service_id) = (select count(distinct(items)) from [dbo].[SplitValue](@service_id, ','))
OUTPUT:
id Service_id bawe_id items
1 2 2 2
2 3 3 3
3 2 3 2
それは少し長いですが、完璧に動作します。
コードを表示します。 – DigiFriend
サービスで2以外の行数とテーブルのどの列が必要ですか?あなたがサンプルを含む場合は最高です。期待される出力。 –
OPはすべての一致する行を表示したいと思いますが、私たちが提供するすべてのサービスIDに対して 'service_id'が存在する必要があります。 '2,3'を指定すると' 1,2,3'や '2,3,4'と' 1'や '4'が存在しないので、与えられたテーブルからすべてを返すべきです。 'service_id'カラム。 – Susang