mam cztery poniższe tabele w SQL Server 2008R2:SQL: obliczenia sekwencji w zapytaniu SQL
DECLARE @ParentGroup TABLE (ParentGroup_ID INT, ParentGroup_Name VARCHAR(100));
DECLARE @ChildGroup TABLE (ChildGroup_id INT, ChildGroup_name VARCHAR(100), ParentGroup_id INT);
DECLARE @Entity TABLE ([Entity_id] INT, [Entity_name] VARCHAR(100));
DECLARE @ChildGroupEntity TABLE (ChildGroupEntity_id INT, ChildGroup_id INT, [Entity_ID] INT);
INSERT INTO @parentGroup VALUES (1, 'England'), (2, 'USA');
INSERT INTO @ChildGroup VALUES (10, 'Sussex', 1), (11, 'Essex', 1), (12, 'Middlesex', 1);
INSERT INTO @entity VALUES (100, 'Entity0'),(101, 'Entity1'),(102, 'Entity2'),(103, 'Entity3'),(104, 'Entity4'),(105, 'Entity5'),(106, 'Entity6');
INSERT INTO @ChildGroupEntity VALUES (1000, 10, 100), (1001, 10, 101), (1002, 10, 102), (1003, 11, 103), (1004, 11, 104), (1005, 12, 100), (1006, 12, 105), (1007, 12, 106);
/*
SELECT * FROM @parentGroup
SELECT * FROM @ChildGroup
SELECT * FROm @entity
SELECT * FROM @ChildGroupEntity
*/
Relacje między tabelami, jak poniżej:
SELECT ParentGroup_Name, ChildGroup_name, [Entity_name], 0 [ChildGroupSequence], 0 [EntitySequence]
FROM @ChildGroupEntity cge
INNER JOIN @ChildGroup cg ON cg.ChildGroup_id=cge.ChildGroup_id
INNER JOIN @parentGroup pg ON pg.parentGroup_id=cg.parentGroup_id
INNER JOIN @entity e ON e.[entity_id]=cge.[Entity_ID]
ORDER BY ParentGroup_Name, ChildGroup_name, [Entity_name]
Wyjście z powyższych zapytanie to:
-------------------------------------------------------------------------------
ParentGroup_Name|ChildGroup_name|Entity_name|ChildGroupSequence|EntitySequence|
-------------------------------------------------------------------------------
England |Essex |Entity3 |0 |0 |
England |Essex |Entity4 |0 |0 |
England |Middlesex |Entity0 |0 |0 |
England |Middlesex |Entity5 |0 |0 |
England |Middlesex |Entity6 |0 |0 |
England |Sussex |Entity0 |0 |0 |
England |Sussex |Entity1 |0 |0 |
England |Sussex |Entity2 |0 |0 |
-------------------------------------------------------------------------------
Chcę teraz poznać grupy podrzędne i wszystkie podmioty powiązane z grupami dzieci do grupy macierzystej 1. Ponadto, aby obliczyć [ChildGroupSequence] [EntitySequence] jak poniżej logiki:
- Kolumna ChildGroupSequence powinny stanowić sekwencję grupy podrzędnej do grupy macierzystej, począwszy od 1000, zwiększając o 100. Tj. pierwsza podgrupa będzie 1000, druga podgrupa będzie 1100.
- Kolumna EntitySequence powinna reprezentować sekwencję encji w grupie podrzędnej, zaczynając od 100 i zwiększając ją o jedną cyfrę, resetując dla każdej podgrupy. To znaczy. pierwsza jednostka w childgroup 1 od 100, podobnie jak pierwszy podmiot w childgroup 2.
Tak, wyjście powinno być w następującym formacie:
-------------------------------------------------------------------------------
ParentGroup_Name|ChildGroup_name|Entity_name|ChildGroupSequence|EntitySequence|
-------------------------------------------------------------------------------
England |Essex |Entity3 |1000 |100 |
England |Essex |Entity4 |1000 |101 |
England |Middlesex |Entity0 |1100 |100 |
England |Middlesex |Entity5 |1100 |101 |
England |Middlesex |Entity6 |1100 |102 |
England |Sussex |Entity0 |1200 |100 |
England |Sussex |Entity1 |1200 |101 |
England |Sussex |Entity2 |1200 |102 |
-------------------------------------------------------------------------------
mogę to zrobić łatwo poprzez czytanie wartości do warstwy aplikacji (program .Net), ale chcą nauczyć się serwera SQL, eksperymentując kilka drobnych rzeczy, takich jak ten. Czy ktoś mógłby mi pomóc w pisaniu tego zapytania SQL?
Każda pomoc będzie mile widziana. Z góry dziękuję.
EDYTOWANIE: Moje przykładowe dane nie wydają się poprawnie odzwierciedlać pierwszą regułę, reguła stwierdza, że ChildGroupSequence powinna zostać zwiększona o 100, a wynik próbki zwiększa się o 1. Drugie zapytanie odzwierciedla przyrost o 100. @jpw : Dziękuję bardzo za wskazanie tego.
Dziękuję bardzo za odpowiedź, bardzo cenione. – Sathish