、問題はあなたのjoin
です。それは、正しく、または間違って、複写された1人の人に複数の値を返すことです。
あなたが例の多数の上にcase
表現の有効性をテストしたい場合は、以下を試すことができます。
-- Set up some test data:
declare @t table ([Level] nvarchar(10),Screen nvarchar(10), Field_Number nvarchar(10), Field_Value nvarchar(10), [Location] nvarchar(10));
insert into @t values('00','100','65','Y','Location1');
-- Generate 10 rows of the same values:
with t as
(
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t union all
select * from @t
), tt as
( -- And then join them together 6 times to get 1 million rows (10^6):
select t1.* from t t1, t t2, t t3, t t4, t t5, t t6
)
select CASE
WHEN B.Level = '00'
THEN
CASE
WHEN b.SCREEN = '100' and b.FIELD_NUMBER = '65' and b.FIELD_VALUE = 'Y' THEN CONCAT(B.Location, ':', B.Level, ':', 'H')
ELSE CONCAT(B.Location, ':', B.Level, ':','A')
END
WHEN B.Level in ('A', 'B', 'C', 'D', 'E') THEN CONCAT(B.Location, ':', 'A-E')
WHEN B.Level in ('F', 'G', 'H') THEN CONCAT(B.Location, ':', 'F-H')
WHEN B.Level = 'I' THEN CONCAT(B.Location, ':', 'I')
WHEN B.Level = 'J' THEN CONCAT(B.Location, ':', 'J')
WHEN B.Level = 'K' THEN CONCAT(B.Location, ':', 'K')
ELSE CONCAT(':', B.Location, B.Level)
END AS Registration
,count(*) as c
from tt b
group by CASE
WHEN B.Level = '00'
THEN
CASE
WHEN b.SCREEN = '100' and b.FIELD_NUMBER = '65' and b.FIELD_VALUE = 'Y' THEN CONCAT(B.Location, ':', B.Level, ':', 'H')
ELSE CONCAT(B.Location, ':', B.Level, ':','A')
END
WHEN B.Level in ('A', 'B', 'C', 'D', 'E') THEN CONCAT(B.Location, ':', 'A-E')
WHEN B.Level in ('F', 'G', 'H') THEN CONCAT(B.Location, ':', 'F-H')
WHEN B.Level = 'I' THEN CONCAT(B.Location, ':', 'I')
WHEN B.Level = 'J' THEN CONCAT(B.Location, ':', 'J')
WHEN B.Level = 'K' THEN CONCAT(B.Location, ':', 'K')
ELSE CONCAT(':', B.Location, B.Level)
END
このステートメントの出力は全く同じで100万のRegistration
値であります:Location1:00:H
。あなたが本当にしたい場合は、あなたが好きなように多くの値としてこのスクリプトのリターンを作ることができるし、あなたのRegistration
は変更されません。これを解決するには
、Person X
のために濾過し、あなたのB
とC
テーブル間のちょうどjoin
(私は願っています、これらは説明の別名だけでなくA
、B
、C
、D
などありますか?)にselect
を行うと見返されるもの私は100%あなたが異なるデータの組み合わせを見ると確信しています。
参加については、「人」あたり1つの値を戻していますか? – JohnHC
編集ご質問や、サンプルデータと望ましい結果を提供します。 'case'式では、ちょうど1つの' then'節が返されます。 –