2015-05-20 5 views
0

Я пытаюсь сделать представление, которое имеет 6 столбцов, и каждая строка - это первые 3 строки из 2 столбцов другой таблицы.SQL View Statement

Для примера:

Asset Table 
Asset_ID  Asset_Name 
1   Kitchen 
2   Bathroom 
3   Bedroom 
4   Bed 
5   Knife 
6   Basement 

View Combined 
Asset_ID_A Asset_Name_A Asset_ID_B Asset_Name_B Asset_ID_C Asset_Name_C 
1   Kitchen  2   Bathroom  3   Bedroom 
4   Bed   5   Knife   6   Basement 

ли что-то подобное возможно?

Извините, это чисто SQL. Я не должен был говорить об этом.

Что касается столбцов, то это будет столбец X и Y из таблицы SQL Z.

+1

Представления и отчеты не связаны между собой; которые вы пытаетесь сделать? –

+1

На первый взгляд это выглядит как PIVOT, но это не так. Большинство программ для составления отчетов позволяют отображать такие данные в спецификации отчета. Это очень сложно сделать в чистом SQL, потому что он де-нормализует ваши данные. Язык был построен * not * для этого. –

+0

У вас есть только эти строки? Или вы хотите первую треть, затем вторую треть, а затем последнюю треть? – Marcelo

ответ

2

Позвольте мне пояснить здесь: это действительно плохая идея, чтобы сделать это в SQL. Тем не менее, это вполне возможно:

WITH Ordered As (
    select Asset_ID, Asset_Name, row_number() over (order by Asset_ID) as Sequence 
    from Asset 
) 
SELECT o1.Asset_ID Asset_ID_A, o1.Asset_Name Asset_Name_A 
     ,o2.Asset_ID Asset_ID_B, o2.Asset_Name Asset_Name_B 
     ,o3.Asset_ID Asset_ID_C, o3.Asset_Name Asset_Name_C 
FROM Ordered o1 
LEFT JOIN Ordered o2 ON o2.Sequence = o1.Sequence + 1 
LEFT JOIN Ordered o3 ON o3.Sequence = o1.Sequence + 2 
WHERE o1.Sequence % 3 = 1 
+0

Хорошо, я благодарю вас за предупреждение и код. Я действительно понимаю, что это плохая идея, но у меня есть руки, привязанные к определенным вещам, а другие варианты - создавать ее вручную в коде с таблицами данных. Я подумал, что это может быть проще. – user3169698

0

Да, это возможно. Во-первых, вам нужно пронумеровать каждую строку. После этого рекурсивно присоединяется к некоторой таблице с использованием номера строки mod 3 и равна 0, 1 и 2.

Ps: извините за плохой английский.

0

Если у вас есть только 6 строк

SELECT 
    t1.Asset_ID as Asset_ID_A, 
    t1.Asset_Name as Asset_Name_A, 
    t2.Asset_ID as Asset_ID_B, 
    t2.Asset_Name as Asset_Name_B, 
    t3.Asset_ID as Asset_ID_C, 
    t3.Asset_Name as Asset_Name_C 
FROM yourtable t1 
INNER JOIN yourtable t2 
ON t2.Asset_ID - 1 = t1.Asset_ID 
INNER JOIN yourtable t3 
ON t3.Asset_ID - 1 = t2.Asset_ID 
WHERE t1.Asset_ID in (1,4)