Ich habe eine Tabelle T1
Ich würde | Col1 | Col2 | Ist aktiv |
---|---|---|---|
1 | T1 | v1 | 1 |
2 | T2 | v2 | 0 |
Erhielt nun die folgenden Daten und diese müssen in die obige Tabelle eingefügt werden.
| Col1 | Col2 |
|--------|--------|
| T1 | v1 |
| T2 | v2 |
| T3 | v3 |
Da diese Daten einige doppelte Werte enthalten, müssen sie basierend auf dem Wert der IsActive-Spalte eingefügt werden. Für Zeilen mit IsActive 1 müssen Sie mit IsActive 2 einfügen und für Zeilen mit IsActive 0 müssen Sie mit IsActive 1 wie unten einfügen. Die eindeutigen Daten müssen mit IsActive 1 eingefügt werden, und das ist derzeit kein Problem
Ich würde | Col1 | Col2 | Ist aktiv |
---|---|---|---|
1 | T1 | v1 | 1 |
2 | T2 | v2 | 0 |
3 | T1 | v1 | 2 |
4 | T2 | v2 | 1 |
5 | T3 | v3 | 1 |
Ich habe eine Temp-Tabelle #Temp erstellt und allgemeine Zeilen in neue eingehende Daten und Daten aus vorhandenen Tabellen wie folgt eingefügt:
#Temp
Col1 | Col2 | Ist aktiv |
---|---|---|
T1 | v1 | 1 |
T2 | v2 | 0 |
T1 | v1 | NULL |
T2 | v2 | NULL |
Verwenden von Gruppieren nach Ich kann doppelte Zeilen auswählen, muss sie jedoch basierend auf dem IsActive-Wert einfügen, sodass ich hier geblieben bin.
insert into T1
select Col1, Col2, '1' from #Temp
GROUP BY Col1, Col2
HAVING COUNT(Col1) > 1
Ich brauche Hilfe zu diesem obigen Teil, danke im Voraus
Try this:
-- create temp table with values to be inserted
INSERT INTO #ToInsert
([Col1], [Col2])
VALUES
('T1', 'v1'),
('T2', 'v2'),
('T3', 'v3')
-- join each value of the temp table to the original table. if
-- value exists increment its `IsActive` by 1, otherwise set it to 1
INSERT INTO t (Col1, Col2, IsActive)
SELECT i.Col1, i.Col2, COALESCE(t.IsActive + 1, 1) AS IsActive
FROM #ToInsert i
LEFT JOIN (
SELECT Col1, Col2, max(IsActive) as IsActive
FROM t
GROUP BY Col1, Col2
) t ON i.Col1 = t.Col1 AND i.Col2 = t.Col2
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen