SQL Регистрация - не может исключить декартовы результаты - PullRequest
1 голос
/ 02 марта 2020

Я не совсем понимаю, как устранить декартовы результаты, которые я получаю в своем соединении. Я думал, что успешно создал подзапрос, но, видимо, нет. Я работаю с одним столом. Я пытаюсь создать столбец, который отражает номер предыдущего года на основе кода транзакции 50 и записывается в декабре.

К сожалению, когда у меня есть транзакция 50 в любой другой месяц, я Я получаю декартово результат 50.

Я думал, что декартово значение было результатом нескольких совпадений с моими критериями «Вкл», поэтому я действительно пытался ограничить это, как вы можете видеть. Это не сработало так, как я планировал.

Вот мой код - как мне удалить декартовы результаты?

SELECT DataList.[State]
      ,DataList.[Symbol]
      ,DataList.[ClaimNumber]
      ,DataList.[AgentState]
      ,DataList.[Agent]
      ,DataList.[Adjuster]
      ,DataList.[Transactions]
      ,DataList.[WrittenDate]
      ,DataList.[EffectiveDate]
      ,DataList.[LossDate]
      ,DataList.[ReportedDate]
      ,sum(DataList.[Amount]) as Amount
    ,sum(EOYResvs.[EOYRESVAmount]) as EOYResvAmount
      ,DataList.[MajorPeril]
      ,DataList.[Class]
      ,DataList.[AmountCover]
      ,DataList.[DedAmount]
      ,DataList.[DedType]
      ,DataList.[Cause]
      ,DataList.[LossType]
      ,DataList.[EarthquakeDedPerc]
      ,DataList.[WindHailDed]
      ,DataList.[Territory]
      ,DataList.[County]
      ,DataList.[LocationState]
      ,DataList.[Zip5]
      ,DataList.[AdjustIND]
      ,DataList.[ClaimCode]
      ,DataList.[FileNumber]
FROM 
    [Database].[dbo].[Info] DataList
LEFT JOIN
    (SELECT
         [State]
      ,[Symbol]
      ,[ClaimNumber]
      ,[AgentState]
      ,[Agent]
      ,[Adjuster]
      ,[Transactions]
      ,[WrittenDate]
      ,[EffectiveDate]
      ,[LossDate]
      ,[ReportedDate]
      ,[Amount] as EOYRESVAmount
      ,[MajorPeril]
      ,[Class]
      ,[AmountCover]
      ,[DedAmount]
      ,[DedType]
      ,[Cause]
      ,[LossType]
      ,[EarthquakeDedPerc]
      ,[WindHailDed]
      ,[Territory]
      ,[County]
      ,[LocationState]
      ,[Zip5]
      ,[AdjustIND]
      ,[ClaimCode]
      ,[FileNumber]
     FROM 
         [Database].[dbo].[Info]
     WHERE
         DATEPART(MONTH, [WrittenDate]) = 12 
         AND [Transactions] = 50
     GROUP BY
         [State], [Symbol], [ClaimNumber], 
         [AgentState], [Agent], [Adjuster], [Transactions],
         [WrittenDate], [EffectiveDate], [LossDate], [ReportedDate],
         [Amount], [MajorPeril], [Class], [AmountCover], [DedAmount],
         [DedType], [Cause], [LossType], [EarthquakeDedPerc], 
         [WindHailDed], [Territory], [County], [LocationState], 
         [Zip5], [AdjustIND], [ClaimCode], [FileNumber]) EOYResvs
     ON datepart(Year, DataList.[WrittenDate]) - datepart(Year, EOYResvs.[WrittenDate]) = 1 AND 
      DataList.[State] = EOYResvs.[State] AND
      DataList.[Symbol] = EOYResvs.[Symbol] AND
      DataList.[ClaimNumber] = EOYResvs.[ClaimNumber] AND
      DataList.[AgentState] = EOYResvs.[AgentState] AND
      DataList.[Agent] = EOYResvs.[Agent] AND
      DataList.[Adjuster] = EOYResvs.[Adjuster] AND
      DataList.[Transactions] = EOYResvs.[Transactions] AND
      DataList.[EffectiveDate] = EOYResvs.[EffectiveDate] AND
      DataList.[LossDate] = EOYResvs.[LossDate] AND
      DataList.[ReportedDate] = EOYResvs.[ReportedDate] AND
      DataList.[MajorPeril] = EOYResvs.[MajorPeril] AND
      DataList.[Class]=EOYResvs.[Class] and
      DataList.[AmountCover]=EOYResvs.[AmountCover] and
      DataList.[DedAmount]=EOYResvs.[DedAmount] and
      DataList.[DedType]=EOYResvs.[DedType] and
      DataList.[Cause]=EOYResvs.[Cause] and
      DataList.[LossType]=EOYResvs.[LossType] and
      DataList.[EarthquakeDedPerc]=EOYResvs.[EarthQuakeDedPerc] and
      DataList.[WindHailDed]=EOYResvs.[WindHailDed] and
      DataList.[Territory]=EOYResvs.[Territory] and
      DataList.[County]=EOYResvs.[County] and
      DataList.[LocationState]=EOYResvs.[LocationState] and
      DataList.[Zip5]=EOYResvs.[Zip5] and
      DataList.[FileNumber]=EOYResvs.[FileNumber]
 Group By
        DataList.[State]
      ,DataList.[Symbol]
      ,DataList.[ClaimNumber]
      ,DataList.[AgentState]
      ,DataList.[Agent]
      ,DataList.[Adjuster]
      ,DataList.[Transactions]
      ,DataList.[WrittenDate]
      ,DataList.[EffectiveDate]              
      ,DataList.[LossDate]
      ,DataList.[ReportedDate]
      ,DataList.[MajorPeril]
      ,DataList.[Class]
      ,DataList.[AmountCover]
      ,DataList.[DedAmount]
      ,DataList.[DedType]
      ,DataList.[Cause]
      ,DataList.[LossType]
      ,DataList.[EarthquakeDedPerc]
      ,DataList.[WindHailDed]
      ,DataList.[Territory]
      ,DataList.[County]
      ,DataList.[LocationState]
      ,DataList.[Zip5]
      ,DataList.[AdjustIND]
      ,DataList.[ClaimCode]
      ,DataList.[FileNumber]
      Order by DataList.[ClaimNumber], DataList.[WrittenDate]

Образец выходных данных

Вот образец данных , Этот вывод идеален, за исключением декартовых результатов в полях, где код транзакции равен 50. Суммы неверны, так как они были умножены на количество результатов из запроса EOYResvs

WrittenDate EffectiveDate   LossDate    ReportedDate    Amount  EOYResvAmount   MajorPeril  Class   AmountInsurance DeductibleAmount    DeductibleType  Cause   LossType    EarthquakeDedPerc   WindHailDeductible  Territory   County  LocationState   Zip5    AdjustIND   ClaimCode   PolicyNumber

24   A  15360   24  4244    9524    50  12/31/2018  10/5/2018   12/1/2018   12/10/2018  5000    NULL    4400    815622  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24   A  15360   24  4244    9524    50  1/31/2019   10/5/2018   12/1/2018   12/10/2018  5000    5000    4400    815622  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24   A  15360   24  4244    9524    50  2/28/2019   10/5/2018   12/1/2018   12/10/2018  5000    5000    4400    815622  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24   A  15360   24  4244    9524    50  3/31/2019   10/5/2018   12/1/2018   12/10/2018  5000    5000    4400    815622  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24   A  15360   24  4244    9524    51  4/25/2019   10/5/2018   12/1/2018   12/10/2018  1432.38 NULL    4400    815622  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24  PA  15361   24  1338    9473    55  12/11/2018  8/9/2018    12/6/2018   12/10/2018  5   NULL    2900    786111  0   500 0   0   20  0   500 104 58  24  64658   P   NULL    125425      
24  PA  15361   24  1338    9473    55  12/13/2018  8/9/2018    12/6/2018   12/10/2018  162.5   NULL    400 786111  0   0   0   0   3   0   0   104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    51  12/17/2018  8/9/2018    12/6/2018   12/10/2018  832.94  NULL    400 786111  0   0   0   0   3   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    55  12/21/2018  8/9/2018    12/6/2018   12/10/2018  162.5   NULL    5000    786111  0   0   0   0   20  0   0   104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    55  12/26/2018  8/9/2018    12/6/2018   12/10/2018  162.5   NULL    2900    786111  0   500 0   0   20  0   500 104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    50  12/31/2018  8/9/2018    12/6/2018   12/10/2018  12000   NULL    100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    55  1/8/2019    8/9/2018    12/6/2018   12/10/2018  -162.5  NULL    400 786111  0   0   0   0   3   0   0   104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    55  1/9/2019    8/9/2018    12/6/2018   12/10/2018  605.55  NULL    400 786111  0   0   0   0   3   0   0   104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    50  1/31/2019   8/9/2018    12/6/2018   12/10/2018  948 12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  2/28/2019   8/9/2018    12/6/2018   12/10/2018  948 12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  3/31/2019   8/9/2018    12/6/2018   12/10/2018  948 12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  4/30/2019   8/9/2018    12/6/2018   12/10/2018  948 12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    55  5/3/2019    8/9/2018    12/6/2018   12/10/2018  12.6    NULL    400 786111  0   0   0   0   3   0   0   104 58  24  64658   A   NULL    125425      
24  PA  15361   24  1338    9473    50  5/31/2019   8/9/2018    12/6/2018   12/10/2018  52500   12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  6/30/2019   8/9/2018    12/6/2018   12/10/2018  52500   12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  7/31/2019   8/9/2018    12/6/2018   12/10/2018  52500   12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  8/31/2019   8/9/2018    12/6/2018   12/10/2018  1548    12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  9/30/2019   8/9/2018    12/6/2018   12/10/2018  1548    12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  10/31/2019  8/9/2018    12/6/2018   12/10/2018  1548    12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    50  11/30/2019  8/9/2018    12/6/2018   12/10/2018  1548    12000   100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    51  12/5/2019   8/9/2018    12/6/2018   12/10/2018  932 NULL    100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24  PA  15361   24  1338    9473    51  12/10/2019  8/9/2018    12/6/2018   12/10/2018  616 NULL    100 786111  0   0   0   0   1   0   0   104 58  24  64658   NULL    NULL    125425      
24   A  15362   24  4244    9524    50  12/31/2018  10/5/2018   12/1/2018   12/10/2018  5000    NULL    4400    783722  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24   A  15362   24  4244    9524    51  1/24/2019   10/5/2018   12/1/2018   12/10/2018  1851.34 NULL    4400    783722  0   250 0   0   9   0   250 283 87  24  63462   NULL    NULL    522434      
24  PA  15363   24  1361    9519    51  12/11/2018  9/1/2018    11/29/2018  12/10/2018  1309.5  NULL    2900    783223  0   500 0   0   20  0   500 245 10  24  65203   NULL    NULL    107908      
24  PA  15363   24  1361    9519    51  12/17/2018  9/1/2018    11/29/2018  12/10/2018  152.69  NULL    2900    783223  0   500 0   0   20  0   500 245 10  24  65203   NULL    NULL    107908      
24  PA  15364   24  3359    9431    55  12/14/2018  9/26/2018   12/7/2018   12/10/2018  177 NULL    4800    700720  0   500 0   0   9   0   500 290 42  24  64740   A   NULL    117274      
24  PA  15364   24  3359    9431    51  12/27/2018  9/26/2018   12/7/2018   12/10/2018  4972.52 NULL    4800    700720  0   500 0   0   9   0   500 290 42  24  64740   NULL    NULL    117274      
24  PA  15364   24  3359    9431    52  2/11/2019   9/26/2018   12/7/2018   12/10/2018  1324    NULL    4800    700720  0   500 0   0   9   0   500 290 42  24  64740   NULL    NULL    117274      
```

1 Ответ

0 голосов
/ 03 марта 2020

Это странные критерии, по которым вы присоединяетесь. Кажется, это вызвано тем, что ваша таблица слишком общая c. Это называется информация, потому что это не транзакция, не претензия и не файл, но может содержать одно или другое или даже что-то вместе взятое? Это затрудняет запрос данных.

Кажется, вы хотите получить что-то вроде этого:

SELECT
  i.*,
  isum.sum_eoyresvamount
FROM database.dbo.info i
LEFT JOIN
(
  SELECT
    <all columns except for WrittenDate and Transactions>,
    DATEPART(YEAR, writtenDate) AS written_year,
    SUM(eoyresvamount) AS sum_eoyresvamount
  FROM database.dbo.info
  WHERE DATEPART(MONTH, writtenDate) = 12 
    AND transactions = 50
  GROUP BY <all columns except for WrittenDate and Transactions>
) isum ON isum.written_year = DATEPART(YEAR, i.writtendate) - 1
      AND isum.state = i.state
      AND <compare all other columns except for WrittenDate and Transactions>
ORDER BY i.claimnumber, i.writtendate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...