Case when tabela zawiera wpis then ...

0

Witam wszystkich, nie potrafię poradzić sobie z konstrukcją case'a w bazie danych, mam widok których zawiera kilka tabel, wśród nich "tabelaX" i "tabelaX_dokumenty", ta druga zawiera id z "tabeliX" i odpowiadające im IDdokumentu(nie wszystkie pozycje z tabeliX mają wystawiony dokument) muszę zrobić kolumnę która będzie informowała czy dla rekordów z "tabelaX" został wystawiony dokument, jeżeli został ma być wpisane 0, jeżeli nie został to 1. Próbowałem sposobów typu:

case when contains()

Ale ta droga raczej prowadzi donikąd. Jakieś pomysły jak to rozwiązać?

Ważna sprawa, liczę na waszą pomoc.

0

dla połączenia sql tabelaX t left join tabelaX_dokumenty td on (t.id_tabelax=td.id_tabelax) możesz to sprawdzić po kolumnie td.id_tabelax - w przypadku braku dokumentu wartość tej kolumy będzie NULL, czyli: case when td.id_tabelix is null then 0 else 1 end

0

A jaka to baza?
A nie lepiej po prostu uzyc samego isNull zamiast case?

ISNULL(expression, alt_value)

0

@john_doe: Nie, bo on chce wartość 0/1. Mógłby wprawdzie załatwić to IsNull(Sign(abs(td.id_tabelix)),0), ale po co?

0
DECLARE @tabelaX TABLE
    (
        id TINYINT ,
        nazwa CHAR(5)
    );
DECLARE @tabelaX_dokumenty TABLE
    (
        nazwa CHAR(4) ,
        id_tabelaX TINYINT
    );

INSERT @tabelaX
VALUES ( 1, 'test1' ) ,
       ( 2, 'test2' ) ,
       ( 3, 'test3' );

INSERT @tabelaX_dokumenty
VALUES ( 'doc1', 1 ) ,
       ( 'doc2', 2 ) ,
       ( 'doc3', 2 );


SELECT *
FROM   @tabelaX;

SELECT *
FROM   @tabelaX_dokumenty;

SELECT   t.id ,
         CASE WHEN MAX(td.id_tabelaX) IS NULL THEN 1
              ELSE 0
         END [wystawiono]
FROM     @tabelaX t
         LEFT JOIN @tabelaX_dokumenty td ON t.id = td.id_tabelaX
GROUP BY t.id;

1 użytkowników online, w tym zalogowanych: 0, gości: 1