У меня есть данные, которые представляют реальные физические местоположения в реальном мире. Концептуально, можно было смотреть на него, как:Матричный запрос с использованием INTERSECT
|--|---|---|---|---|---|
|1A| 2A| 3A| 4A| 5A| 6A|
|--|---|---|---|---|---|
|1B| 2B| 3B| 4B| 5B| 6B|
|--|---|---|---|---|---|
|1C| 2C| 3C| 4C| 5C| 6C|
|--|---|---|---|---|---|
|1D| 2D| 3D| 4D| 5D| 6D|
|--|---|---|---|---|---|
|1E| 2E| 3E| 4E| 5E| 6E|
|--|---|---|---|---|---|
|1F| 2F| 3F| 4F| 5F| 6F|
|--|---|---|---|---|---|
играть вместе, вот DDL/DML:
CREATE TABLE [dbo].[test](
[x] [int] NOT NULL,
[y] [char](10) NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[x] ASC,
[y] ASC
)
) ON [PRIMARY]
GO
INSERT INTO Test(x,y) VALUES(1,'A');
INSERT INTO Test(x,y) VALUES(1,'B');
INSERT INTO Test(x,y) VALUES(1,'C');
INSERT INTO Test(x,y) VALUES(1,'D');
INSERT INTO Test(x,y) VALUES(1,'E');
INSERT INTO Test(x,y) VALUES(1,'F');
INSERT INTO Test(x,y) VALUES(2,'A');
INSERT INTO Test(x,y) VALUES(2,'B');
INSERT INTO Test(x,y) VALUES(2,'C');
INSERT INTO Test(x,y) VALUES(2,'D');
INSERT INTO Test(x,y) VALUES(2,'E');
INSERT INTO Test(x,y) VALUES(2,'F');
INSERT INTO Test(x,y) VALUES(3,'A');
INSERT INTO Test(x,y) VALUES(3,'B');
INSERT INTO Test(x,y) VALUES(3,'C');
INSERT INTO Test(x,y) VALUES(3,'D');
INSERT INTO Test(x,y) VALUES(3,'E');
INSERT INTO Test(x,y) VALUES(3,'F');
INSERT INTO Test(x,y) VALUES(4,'A');
INSERT INTO Test(x,y) VALUES(4,'B');
INSERT INTO Test(x,y) VALUES(4,'C');
INSERT INTO Test(x,y) VALUES(4,'D');
INSERT INTO Test(x,y) VALUES(4,'E');
INSERT INTO Test(x,y) VALUES(4,'F');
INSERT INTO Test(x,y) VALUES(5,'A');
INSERT INTO Test(x,y) VALUES(5,'B');
INSERT INTO Test(x,y) VALUES(5,'C');
INSERT INTO Test(x,y) VALUES(5,'D');
INSERT INTO Test(x,y) VALUES(5,'E');
INSERT INTO Test(x,y) VALUES(5,'F');
INSERT INTO Test(x,y) VALUES(6,'A');
INSERT INTO Test(x,y) VALUES(6,'B');
INSERT INTO Test(x,y) VALUES(6,'C');
INSERT INTO Test(x,y) VALUES(6,'D');
INSERT INTO Test(x,y) VALUES(6,'E');
INSERT INTO Test(x,y) VALUES(6,'F');
В самом деле, матрица будет более миллиона X миллионов, но если я могу разрешите эту проблему, я смогу применить ее к моему приложению. Проблема с моей программой заключается в количестве данных для отображения для них. Поскольку в этой матрице они всегда интересуются периферией сетки данных, я предлагаю им возможность увидеть подмножество данных на одной из четырех сторон сетки. Это управляется фильтром Top и предложением Order by.
Я не могу использовать значения данных x или y. Только то, как они складываются.
например.
select top 2 *
from test
order by y
возвращает верхние два ряда матрицы, вычерченные выше. порядка по у убыв возвращает две нижние строки порядка по х возрастанию возвращает левые два ряда
порядка по х по алфавиту возвращает правильные две строки
вышеуказанных запросов сделали неуправляемым ситуацию более управляемой, но теперь они хотят больше ,
Меня спросили, есть ли способ прочитать в углу матрицы.
|1D| 2D| 3D|
|--|---|---|
|1E| 2E| 3E|
|--|---|---|
|1F| 2F| 3F|
|--|---|---|
Казалось бы, пересечение сделало бы трюк, но я не нахожу успеха. Я попробовал пересечение с рекурсивным соединением, и мне не повезло.
Кажется, что я мог запросить верхние 3 строки и левые 3 строки, а затем вернуть только те, которые имеют то же значение, то есть пересечение, но я продолжаю возвращать полные строки.
select top 6 t1.x, t1.y
from test t1
inner join test t2 on (t1.x = t2.x) and (t1.y = t2.y)
intersect
select top 6 t2.x, t2.y
from test t2
inner join test t1 on (t1.x = t2.x) and (t1.y = t2.y)
Казалось бы, это близко, если бы я мог получить предложение Order by для работы в обоих вариантах.
Любая помощь приветствуется.
Я понимаю, что означает угол, когда вы хотите ровно одну ячейку. Почему у вас есть «топ-6»? –