SQL-запрос для получения данных в двух полях из одного столбца - PullRequest
1 голос
/ 07 июня 2010

У меня есть таблица [Tbl1], содержащая два поля.

ID как int А TextValue as nvarchar (max)

Предположим, есть 7 записей. Мне нужен набор результатов, который имеет два столбца Text1 и Text2. В Text1 должны быть первые 4 записи, а в Text2 - 3 записи.

[tbl1]

ID | TextValue

1. | Apple,

2. | Mango

3. | Orange

4. | Ананас

5. | Banana

6. | Виноград

7. | Sapota

Теперь набор результатов должен иметь


Text1 | Text2

Apple | Banana

Манго | Виноград

Оранжевый | Sapota

Ананас |

Ответы [ 2 ]

2 голосов
/ 08 июня 2010

Интересно, как это может быть полезно, но я думаю, вы можете попробовать следующее:

SELECT      t1.TextValue AS Text1,
            t2.TextValue AS Text2
FROM        tbl1 t1
LEFT JOIN   tbl1 t2 ON ((t2.id - 4) = t1.id)
WHERE       t1.id <= 4;

Контрольный пример:

CREATE TABLE tbl1 (id int, textvalue varchar(15));

INSERT INTO tbl1 VALUES(1, 'Apple');
INSERT INTO tbl1 VALUES(2, 'Mango');
INSERT INTO tbl1 VALUES(3, 'Orange');
INSERT INTO tbl1 VALUES(4, 'Pineapple');
INSERT INTO tbl1 VALUES(5, 'Banana');
INSERT INTO tbl1 VALUES(6, 'Grapes');
INSERT INTO tbl1 VALUES(7, 'Sapota');

Результат:

+-----------+--------+
| Text1     | Text2  |
+-----------+--------+
| Apple     | Banana |
| Mango     | Grapes |
| Orange    | Sapota |
| Pineapple | NULL   |
+-----------+--------+

UPDATE:

Как @ AlexCuse , предложенный в комментарии ниже, вы также можете использовать переменную для получения количества строк в таблице, чтобы иметь запрос, который работает для любого числа строк:

DECLARE @x float;

SET @x = ROUND((SELECT COUNT(*) FROM tbl1) / 2.0, 0);

SELECT      t1.TextValue AS Text1,
            t2.TextValue AS Text2
FROM        tbl1 t1
LEFT JOIN   tbl1 t2 ON ((t2.id - @x) = t1.id)
WHERE       t1.id <= @x;
1 голос
/ 08 июня 2010

Использование:

SELECT t.textvalue AS text1,
       (SELECT x.textvalue
          FROM TBL x
         WHERE x.id = t.id + 4) AS text2
  FROM TBL t
 WHERE t.id <= 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...