нужен вывод sql-запроса, подобный этому

#sql #sql-server

#sql #sql-сервер

Вопрос:

Это мой запрос

 SELECT 
  F.intfloorno,
  FL.nvrflatname 
FROM tbl_floormaster F 
INNER JOIN tbl_flatmaster FL ON FL.intfloorid=F.intfloorid 
WHERE intblockid=1 
ORDER BY intfloorno DESC
  

это вывод:

 floorno        flat       
2          FlatB1
2          FlatB2
1          FlatA1
1          FlatA2
  

но мне это нужно так:

 floorno  flat        dummycolum
1       FlatA1         FlatA2
2       FlatB2         FlatB2 
  

Комментарии:

1. какую базу данных вы используете (Oracle, SQL Server …)?

2. Ваш пример не совсем ясен. Во-первых: у вас есть только две квартиры на этаже или больше? Второе: на floorno = 2, плоский столбец должен быть FlatB1, правильно?

3. Вы пытаетесь контролировать презентационный вывод этих данных для этого запроса или транспонировать результаты таблицы? Если это проблема с презентацией, помните, что рендеринг выходных данных — это не то же самое, что запрос структуры реляционной таблицы, как упоминает rsj ниже.

4. на первом этаже у меня две квартиры, на 2 этаже у меня две квартиры

Ответ №1:

Хорошо, и если бы ваш исходный вывод содержал 10000 экземпляров flats на floorno 1, вам понадобилось бы 9 999 фиктивных столбцов?

Игнорируя сортировку floorno — что легко с помощью предложения ORDER BY — вы путаете вывод запроса с форматом отображения выходных данных.

Запросите данные с помощью SQL, затем передайте их какому-либо другому процессу, в котором вы можете отформатировать их в своем уровне представления. Если вы опишете, каков ваш уровень представления (html?), Тогда вы можете переместить свой пост в вопрос HTML / XHR о отображении результатов запроса в таблице.

Комментарии:

1. Это была моя первоначальная мысль, хотя мне кажется, что он, возможно, просто хочет перенести таблицу

Ответ №2:

Это:

 SELECT F.intfloorno as Floor,
    stuff( (SELECT ',' FL.nvrflatname
     FROM tbl_flatmaster FL 
     WHERE FL.intfloorid=F.intfloorid
     ORDER BY FL.nvrflatname
     FOR XML PATH ('')
    ), 1, 2, '') as FlatList
WHERE intblockid=1 
ORDER BY intfloorno DESC
  

даст

 Floor   FlatList
1       FlatA1,FlatA2
2       FlatB1,FlatB2 
  

не в отдельных столбцах, но, может быть, то, что вы хотите?

Ответ №3:

Вы пытаетесь контролировать презентационные результаты? Если это так, то это неправильный подход. Однако, если вы пытаетесь перенести свою таблицу, вы можете заглянуть в перекрестную таблицу или сводный запрос. Вот другое описание