2017-09-22 4 views
0

Je veux sélectionner tous les enregistrements de la requête ci-dessous, si la valeur [@myTable] .MessageId n'existe pas, considérer 0, dans la jointure.si existe la valeur de la colonne en sql

DECLARE @myTable TABLE 
     (
      MessageId BIGINT , 
      RecieverId VARCHAR(100) 
     ) 



    INSERT INTO @myTable 
      (MessageId , 
       RecieverId 

      ) 
      SELECT MAX(MessageID) , 
        ReceiverID 
      FROM dbo.CM_MessageStatus 
      WHERE ReceiverID IN (SELECT * 
            FROM string_split(@UserID, ',')) 
        AND DeliveredDate IS NOT NULL 
      GROUP BY ReceiverID 

SELECT COUNT(CM_MessageStatus.MessageID) AS MessageID , 
     dbo.CM_MessageStatus.ReceiverID 
FROM dbo.CM_MessageStatus 
     LEFT JOIN @myTable ON [@myTable].RecieverId = CM_MessageStatus.ReceiverID 
           AND CM_MessageStatus.MessageID > [@myTable].MessageId 
WHERE --DeliveredDate IS NULL AND 

--Si [@myTable] .MessageId n'existe pas considérer 0

CM_MessageStatus.MessageID > [@myTable].MessageId 
    AND ReceiverID IN (SELECT * 
         FROM string_split(@UserID, ',')) 
GROUP BY dbo.CM_MessageStatus.ReceiverID 

Note: Je veux vérifier si [@myTable] .MessageId n'existe pas considérer 0

enter image description here

+0

Bonjour Bilal, je lis votre question, mais je ne comprends pas ce qui est exactement votre problème, voulez-vous dire 'Mes sageId = NULL' puis remplacez _NULL_ par 0? – Sami

+0

si [@myTable] .MessageId n'existe pas considère 0, s'il vous plaît voir l'image – bilal

+0

Toujours pas clair, mybe vous voulez dire s'il n'y a pas de données dans votre tableau alors le résultat doit être comme _0 rows_? – Sami

Répondre

0
 INSERT INTO @myTable 
     (MessageId , 
      RecieverId 

     ) 
     SELECT MAX(MessageID) , 
       ReceiverID 
     FROM dbo.CM_MessageStatus 
     WHERE ReceiverID IN (SELECT * 
           FROM string_split(@UserID, ',')) 
       AND DeliveredDate IS NOT NULL 
     GROUP BY ReceiverID 

    IF @@ROWCOUNT= 0 
     insert into @myTable values(0,0) 
     select * from @mytable 
    ELSE 
     select * from @myTable 
+0

isnull fonctionne si vous avez null vérifier le tir instantané – bilal

+0

J'ai eu ce que vous dites. Dans ce cas, j'ai modifié la requête ci-dessus, où j'ai inclus une vérification pour le Rowcount comme ci-dessous. Si Rowcount = 0, alors 0 est inséré dans votre variable de table, sinon retourne la ligne de la table. J'espère que cela t'aides! –