SQL CASE, сравнивающий Text Datarow с Int Datarow - PullRequest
0 голосов
/ 17 октября 2018

В моей таблице есть комментарий Datarow, который хранится как текстовый тип данных.

И у меня есть Datarow idPersonalstamm, который хранится как int.

Моя проблема иногдаслучается, что данные из Personalstamm копируются в комментарии.

Так что я сделал утверждение case, которое должно привести оба к varchar, а затем сравнить их, и если комментарий равен personalstamm, он должен установить комментарий как Null, если нетэтот комментарий.

Но это всегда касается оператора else.В чем моя вина или как я могу достичь своей цели другим способом?

Все это является частью скрипта Powershell, который запрашивает этот запрос раз в неделю из терминала посетителя.

> My output looks like this  
> Nr. id. Comment.  
>1---2----2  
> 2---3---some text  
> 3---4---

> it should look like this   
>Nr. id. Comment.   
>1---2---  
>2---3---some text  
>3---4---



<pre><code>SELECT ROW_NUMBER() OVER(ORDER BY vb.Arrival ASC) AS Nr,
       p.idPersonalstamm,
       CASE vr.rating 
          WHEN 3 THEN 'Sehr Gut' 
          WHEN 2 THEN 'Gut' 
          WHEN 1 THEN 'Nicht so Gut' 
          ELSE 'Sonstiges' 
       END AS Bewertung, 
       <b>Case 
          WHEN CAST(vr.Comment as varchar (20)) = CAST(p.idPersonalstamm as varchar (20)) Then null 
          ELSE vr.Comment 
        END as Comment,</b>
       vb.Arrival,
       vb.Departure,
       p.Name,
       p.FirstName,
       p.Company,
       p.Stadt
From Personalstamm p 
  left join (
    select vr.*,
           row_number() over (partition by idPersonalstamm order by idPersonalstamm) as seqnum 
    from VisitRating vr
  ) vr on p.idPersonalstamm =  vr.idPersonalstamm 
  left join (
    select vb.*,
           row_number() over (partition by idVisitor order by idVisitor) as seqnum       
    from VisitorBooking vb
  ) vb on p.idPersonalstamm = vb.idVisitor and vb.seqnum = vr.seqnum
where p.idPersonalstamm is not null

1 Ответ

0 голосов
/ 17 октября 2018

Не могли бы вы попробовать:

Case 
      WHEN LTRIM(CAST(vr.Comment as varchar (20))) = CAST(p.idPersonalstamm as varchar (20)) Then null 
      ELSE vr.Comment 
    END as Comment

или: Case WHEN CAST (p.idPersonalstamm как varchar (20)), например '%' + CAST (vr.Comment как varchar (20)) + '%'Тогда ноль ELSE vr.Comment END в качестве комментария

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...