it-swarm.com.de

Verwenden der IF ELSE-Anweisung basierend auf Count, um verschiedene Insert-Anweisungen auszuführen

Während ich meine Datenbank durchsuche, führe ich eine INSERT-Anweisung aus, wenn ein bestimmtes Element nicht vorhanden ist, und ich führe eine andere INSERT-Anweisung aus, wenn ich eines oder mehrere dieser Elemente finde.

Ich bin nicht ganz sicher, wie ich die IF ELSE-Ausdrücke verwenden soll.

Was ich bisher habe, ist eine Aussage, die zählt, wie oft die Zieldaten erscheinen. es wird TRUE gedruckt, wenn es größer als 0 ist. Andernfalls wird FALSE gedruckt. Ich kann keine Beispiele finden, die mir helfen zu verstehen, wie ich zwei verschiedene INSERT-Anweisungen ausführen kann.

Folgendes habe ich bisher:

SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
  SELECT [Some Column], COUNT(*) TotalCount
  FROM INCIDENTS
  WHERE [Some Column] = 'Target Data'
  GROUP BY [Some Column]
)
47
user1934821

Abhängig von Ihren Bedürfnissen gibt es einige Möglichkeiten:

IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE')
    --INSERT SOMETHING
ELSE
    --INSERT SOMETHING ELSE

Oder noch etwas länger

DECLARE @retVal int

SELECT @retVal = COUNT(*) 
FROM TABLE
WHERE COLUMN = 'Some Value'

IF (@retVal > 0)
BEGIN
    --INSERT SOMETHING
END
ELSE
BEGIN
    --INSERT SOMETHING ELSE
END 
89
sgeddes

Solange Sie es auf Count basierend auf mehr als 0 finden müssen, ist es besser, EXISTS wie folgt zu verwenden:

IF EXISTS (SELECT 1 FROM INCIDENTS  WHERE [Some Column] = 'Target Data')
BEGIN
    -- TRUE Procedure
END
ELSE BEGIN
    -- FALSE Procedure
END
6
Atheer Mostafa

IF exists

IF exists (select * from table_1 where col1 = 'value')
BEGIN
    -- one or more
    insert into table_1 (col1) values ('valueB')
END
ELSE
    -- zero
    insert into table_1 (col1) values ('value') 
3
paparazzo

Nicht ganz klar, was Sie damit meinen 

"I cant find any examples to help me understand how I can use this to run 2 different statements:"

. Verwendet es CASE wie eine SWITCH, die Sie suchen? 

select case when totalCount >= 0 and totalCount < 11 then '0-10'
            when tatalCount > 10 and totalCount < 101 then '10-100'
            else '>100' end as newColumn
from (
  SELECT [Some Column], COUNT(*) TotalCount
  FROM INCIDENTS
  WHERE [Some Column] = 'Target Data'
  GROUP BY [Some Column]
) A
2
Kaf

Es gibt viele, viele Möglichkeiten, dies zu programmieren, aber es gibt einen möglichen Weg. Ich gehe von MS SQL aus

Wir beginnen mit dem Zählen der Zeilen (ein anderes Quick Example ) und tun dann if/else

-- Let's get our row count and assign it to a var that will be used
--    in our if stmt 
DECLARE @HasExistingRows int -- I'm assuming it can fit into an int
SELECT @HasExistingRows = Count(*) 
   ELSE 0 -- false
FROM
   INCIDENTS
WHERE {Your Criteria}
GROUP BY {Required Grouping}

Jetzt können wir die If/Else Logic MSDN Docs

-- IF / Else / Begin / END Syntax
IF @HasExistingRows = 0 -- No Existing Rows
   BEGIN
      {Insert Logic for No Existing Rows}
   END
ELSE -- existing rows are found
   BEGIN
      {Insert logic for existing rows}
   END

Ein anderer schneller Weg (inspiriert von Mahmoud Gamals Kommentar):

Vergessen Sie die gesamte Variablenerstellung zuweisung - siehe "EXISTS" - MSDN Docs 2 - /.

IF EXISTS ({SELECT Query})
   BEGIN
      {INSERT Version 1}
   END
ELSE
   BEGIN
      {INSERT version 2}
   END
1
Ray K

eine naheliegende Lösung besteht darin, zwei separate Abfragen auszuführen. Wählen Sie zuerst alle Elemente mit count = 1 aus, und führen Sie den Insert aus. Wählen Sie dann die Elemente mit count> 1 aus und führen Sie den zweiten Insert aus.

wenn die beiden Inserts ähnlich sind, können Sie sie wahrscheinlich zu einer Abfrage zusammenfassen.

eine andere Möglichkeit besteht darin, einen Cursor zum Durchlaufen Ihres Recordset zu verwenden und die für jede Zeile erforderliche Logik auszuführen.

1
Zdravko Danev

Verwenden Sie einfach das Folgende:

IF ((SELECT count (*) FROM Tabelle) = 0) BEGIN

....

ENDE

0
Katie

Wenn dies in SQL Server ist, ist Ihre Syntax korrekt. Sie müssen jedoch den COUNT (*) als Gesamtzahl aus Ihrer verschachtelten Abfrage referenzieren. Dies sollte Ihnen das geben, was Sie brauchen:

SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM
(
  SELECT [Some Column], COUNT(*) TotalCount
  FROM INCIDENTS
  WHERE [Some Column] = 'Target Data'
  GROUP BY [Some Column]
) DerivedTable

Auf diese Weise können Sie TotalCount einer Variablen zuweisen und dann eine IF ELSE-Anweisung verwenden, um Ihre INSERT-Anweisungen auszuführen:

DECLARE @TotalCount int
SELECT @TotalCount = TotalCount FROM
(
  SELECT [Some Column], COUNT(*) TotalCount
  FROM INCIDENTS
  WHERE [Some Column] = 'Target Data'
  GROUP BY [Some Column]
) DerivedTable
IF @TotalCount > 0
    -- INSERT STATEMENT 1 GOES HERE
ELSE
    -- INSERT STATEMENT 2 GOES HERE
0
Jeff