Попробуйте это ... (используя случай)
Раствор 01
DECLARE @cnt int = (SELECT count(*) from Dummy)
SELECT
case when VAL <= @cnt/2 then VAL end col1,
case when VAL <= @cnt/2 then VAL + @cnt/2 end col2
FROM Dummy
where VAL <= @cnt/2
Выход
+------+------+
| col1 | col2 |
+------+------+
| 1 | 5 |
| 2 | 6 |
| 3 | 7 |
| 4 | 8 |
+------+------+
Онлайн-демонстрация: http://sqlfiddle.com/#!18/57f28/58/0
Решение 02
SELECT
case when (VAL%2) = 1 then VAL end as col1,
case when (VAL%2) = 1 then VAL + 1 end as col2
FROM Dummy
where VAL%2 = 1
выход
+------+------+
| col1 | col2 |
+------+------+
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
+------+------+
Онлайн-демонстрация: http://sqlfiddle.com/#!18/57f28/76/0
Обновлено 01 ...
Решение 01
DECLARE @cnt INT = (SELECT Count(*) FROM dummy)
SELECT CASE
WHEN val <= @cnt / 2 THEN CONVERT(NVARCHAR(5), val) + ' '
+ CONVERT(NVARCHAR(5), val + @cnt/2)
END col1
FROM dummy
WHERE val <= @cnt / 2
выход
+------+
| col1 |
+------+
| 1 5 |
| 2 6 |
| 3 7 |
| 4 8 |
+------+
Онлайн-демонстрация: http://sqlfiddle.com/#!18/57f28/124/0
Решение 02
SELECT CASE
WHEN ( val%2 ) = 1 THEN CONVERT(NVARCHAR(5), val) + ' '
+ CONVERT(NVARCHAR(5), (val + 1))
END AS col1
FROM dummy
WHERE val%2 = 1
выход
+------+
| col1 |
+------+
| 1 2 |
| 3 4 |
| 5 6 |
| 7 8 |
+------+
Онлайн демо: http://sqlfiddle.com/#!18/57f28/114/0
Обновлено 02 ...
SELECT id,
CASE
WHEN colab = 0 THEN colab2 + (SELECT Count(*) FROM dummy) / 2 ELSE colab2
END OutputCol
FROM (SELECT id,
(id%2) AS colAB,
Row_number() OVER (partition BY (id%2) ORDER BY id) AS colAB2
FROM dummy) t1
ORDER BY id
выход
+----+-----------+
| id | OutputCol |
+----+-----------+
| 1 | 1 |
| 2 | 5 |
| 3 | 2 |
| 4 | 6 |
| 5 | 3 |
| 6 | 7 |
| 7 | 4 |
| 8 | 8 |
+----+-----------+
Примечание. Вы можете удалить столбец ID
и получить только один столбец (OutputCol
), если хотите.
SELECT
id,
CASE WHEN colab....
Онлайн-демонстрация: http://sqlfiddle.com/#!18/57f28/257/1