Tôi có bốn bảng sau trong SQL Server 2008R2:SQL server: tính toán chuỗi trong một truy vấn 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
*/
Các mối quan hệ giữa các bảng như sau:
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]
Đầu ra của trên truy vấn là:
-------------------------------------------------------------------------------
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 |
-------------------------------------------------------------------------------
Bây giờ, tôi muốn tìm hiểu các nhóm con và tất cả các thực thể được liên kết với các nhóm con cho nhóm mẹ 1. Ngoài ra, tôi muốn tính [ChildGroupSequence], [EntitySequence] đối với logic bên dưới:
- Cột ChildGroupSequence phải trình bày chuỗi của nhóm con trong nhóm chính, bắt đầu từ 1000 và tăng dần 100. Nhóm phụ thứ nhất sẽ là 1000, nhóm phụ thứ hai sẽ là 1100.
- Cột EntitySequence phải đại diện cho chuỗi thực thể trong nhóm con, bắt đầu từ 100 và tăng dần bằng các chữ số đơn, đặt lại cho từng nhóm con. I E. đơn vị đầu tiên trong childgroup 1 bắt đầu từ 100, cũng như các thực thể đầu tiên trong childgroup 2.
Vì vậy, đầu ra phải ở trong các định dạng sau:
-------------------------------------------------------------------------------
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 |
-------------------------------------------------------------------------------
tôi có thể làm điều này dễ dàng bằng cách đọc các giá trị vào lớp ứng dụng (chương trình .Net), nhưng muốn tìm hiểu máy chủ SQL bằng cách thử nghiệm một vài điều nhỏ như thế này. Bất cứ ai có thể giúp tôi bằng văn bản truy vấn SQL này?
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn trước.
EDIT: Dữ liệu mẫu của tôi dường như không phản ánh chính xác quy tắc đầu tiên, quy tắc cho biết rằng ChildGroupSequence phải được tăng thêm 100 và kết quả đầu ra mẫu tăng lên 1. Truy vấn thứ hai phản ánh số gia tăng 100. @jpw : Cảm ơn bạn rất nhiều vì đã chỉ ra điều này.
Cảm ơn bạn rất nhiều vì câu trả lời này, được đánh giá rất nhiều. – Sathish