tsql
This commit is contained in:
parent
fdbc391d3b
commit
1a59f9dc36
@ -4,3 +4,59 @@ include_toc: true
|
||||
---
|
||||
# Transact-SQL
|
||||
|
||||
## begin transaction
|
||||
|
||||
``` sql
|
||||
begin transaction
|
||||
-- ...insert or whatever...
|
||||
commit; -- if all ok
|
||||
rollback; --if not ok
|
||||
```
|
||||
|
||||
## Check if a List of numbers exist in a table:
|
||||
|
||||
``` sql
|
||||
-- declare array
|
||||
DECLARE @IDList TABLE (ID INT);
|
||||
|
||||
-- fill array
|
||||
INSERT INTO @IDList (ID)
|
||||
VALUES (274), (7238), (7546), (7719), (36227);
|
||||
|
||||
-- create table with id and exists/not exist
|
||||
SELECT l.ID, CASE WHEN vv.OBJ_ID IS NOT NULL THEN 'Exists' ELSE 'Does Not Exist' END AS Status
|
||||
FROM @IDList l
|
||||
LEFT JOIN VAL vv ON l.ID = vv.OBJ_ID;
|
||||
```
|
||||
|
||||
## Mehrere Zeilen zusammen in 1 Zeile mergen
|
||||
|
||||
Annahme:
|
||||
- Tabelle hat Spalten OBJ_ID, VAL_TEXT, FLD_ID
|
||||
- OBJ_ID hat mehrere Einträge, mit unterschiedlichen Werten in VAL_TEXT und FLD_ID. Halt je nach Feld andere Feldwerte.
|
||||
- Ich möchte eine Query, die mir 1 Zeile pro OBJ_ID ausgibt, mit 1 Spalte "url" und 1 Spalte "Name"
|
||||
- "url" ist in VAL_TEXT mit FLD_ID xy (in diesem Bsp. egal) enthalten
|
||||
- "name" ist in VAL_TEXT mit FLD_ID 40414 enthalten
|
||||
- Bei der Query soll nur die OBJ_ID berücksichtig werden, die in einem VAL_TEXT "%wikidata%" drin hat
|
||||
|
||||
``` sql
|
||||
WITH CTE_Wikidata AS (
|
||||
-- Sammle alle OBJ_IDs, bei denen VAL_TEXT "wikidata" enthält
|
||||
SELECT OBJ_ID, VAL_TEXT AS url
|
||||
FROM VAL
|
||||
WHERE VAL_TEXT LIKE '%wikidata%'
|
||||
),
|
||||
CTE_Person AS (
|
||||
-- Sammle alle OBJ_IDs, bei denen FLD_ID = 240414 und die in CTE_Wikidata existieren
|
||||
SELECT v.OBJ_ID, v.VAL_TEXT AS person
|
||||
FROM VAL v
|
||||
INNER JOIN CTE_Wikidata wd ON v.OBJ_ID = wd.OBJ_ID
|
||||
WHERE v.FLD_ID = 40414
|
||||
)
|
||||
SELECT
|
||||
wd.OBJ_ID,
|
||||
wd.url,
|
||||
p.person
|
||||
FROM CTE_Wikidata wd
|
||||
LEFT JOIN CTE_Person p ON wd.OBJ_ID = p.OBJ_ID;
|
||||
```
|
||||
|
||||
Loading…
Reference in New Issue
Block a user