2015-11-11 1 views
0

Я следующий SQL-запрос:SQL Select Один дополнительный «ложь» строка за присоединиться

SELECT 
    O.Id AS OrganisationId, o.Name as OrganistionName, 
    pt.product_type_name as ProductType 
FROM 
    [Content].[Organisations] O (nolock) 
JOIN 
    [Content].[ProductOrganisations] PO (nolock) ON PO.OrganisationId = O.Id 
JOIN 
    [dbo].[report_info] R (nolock) ON PO.ProductId = R.report_id 
JOIN 
    [dbo].[CONTENT_ProductTypes] PT (nolock) ON R.[product_type_id] = PT.PRODUCTTYPEID 
WHERE 
    O.ShowCompanyPage = 1 
GROUP BY 
    O.Id , o.Name, PT.PRODUCTTYPEID, pt.product_type_name 
ORDER BY 
    o.Name, pt.product_type_name 

Который возвращает следующие результаты:

OrganisationId OrganistionName ProductType 
1  Coca Cola Company Article 
1  Coca Cola Company Book 
1  Coca Cola Company Company Profile 
2  PepsiCo Inc.  Audio Conference 
2  PepsiCo Inc.  Book 
2  PepsiCo Inc.  Company Profile 
3  Pfizer, Inc.  Article 
3  Pfizer, Inc.  Company Profile 
3  Pfizer, Inc.  Credit Rating Report 

Но мне нужно, чтобы добавить в экстра " false "для каждой организации.

Эта строка должна отображаться как первая строка, а ProductType должна быть пустой.

Например:

OrganisationId OrganistionName ProductType 
1  Coca Cola Company 
1  Coca Cola Company Article 
1  Coca Cola Company Book 
1  Coca Cola Company Company Profile 
2  PepsiCo Inc.   
2  PepsiCo Inc.  Audio Conference 
2  PepsiCo Inc.  Book 
2  PepsiCo Inc.  Company Profile 
3  Pfizer, Inc. 
3  Pfizer, Inc.  Article 
3  Pfizer, Inc.  Company Profile 
3  Pfizer, Inc.  Credit Rating Report 

Любые идеи?

+1

Вы можете добавить 'UNION SELECT DISTINCT OrganisationId, OrganisationName, '', как [ProductType] FROM [[[такой же, как предыдущий запрос здесь]] ] ' – CactusCake

+0

Поскольку кажется, что точность важна, вы можете захотеть взглянуть на эту статью, прежде чем продолжать засовывать ваши запросы с помощью nolock. Это НЕ волшебная кнопка «быстро». У этого есть некоторые очень серьезные побочные эффекты, которые многие люди не понимают. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+0

@JoeMalpass - ваше решение дает мне пустой ProductType каждую вторую строку, к сожалению. Мне нужна пустая ProductType как стартовая строка каждой организации. Есть идеи? – fourbeatcoder

ответ

2

Вы можете использовать союз, чтобы создать это:

SELECT O.Id AS OrganisationId, o.Name as OrganistionName, '' as ProductType 
FROM [Content].[Organisations] O (nolock) 
JOIN [Content].[ProductOrganisations] PO (nolock) 
ON PO.OrganisationId = O.Id 
JOIN [dbo].[report_info] R (nolock) 
ON PO.ProductId = R.report_id 
WHERE O.ShowCompanyPage = 1 
GROUP BY O.Id , o.Name 

union 

SELECT DISTINCT O.Id AS OrganisationId, o.Name as OrganistionName, '' as ProductType 
FROM [Content].[Organisations] O (nolock) 
JOIN [Content].[ProductOrganisations] PO (nolock) 
ON PO.OrganisationId = O.Id 
JOIN [dbo].[report_info] R (nolock) 
ON PO.ProductId = R.report_id 
WHERE O.ShowCompanyPage = 1 
GROUP BY O.Id , o.Name 
ORDER BY o.Name, pt.product_type_name 
+0

Ваше решение не будет работать. Он просто даст мне список организаций со ВСЕМИ пустым ProductType для каждой строки. Пожалуйста, оглянитесь на свое первоначальное сообщение, чтобы увидеть данные, которые мне нужно вернуть, и отредактировать свой ответ. – fourbeatcoder

0

Похожие советы от @JoeMalpass в комментариях в ор выше, вот как я ее решил.

SELECT DISTINCT O.Id AS OrganisationId, o.Name as OrganisationName, 0, '' as [product_type_name], 0 AS ProductsInType 
FROM [Content].[Organisations] O (nolock) 
WHERE O.ShowCompanyPage = 1 

UNION 

SELECT O.Id AS OrganisationId, o.Name as OrganistionName, PT.PRODUCTTYPEID, pt.product_type_name, COUNT(R.report_id) AS ProductsInType 
FROM [Content].[Organisations] O (nolock) 
JOIN [Content].[ProductOrganisations] PO (nolock) 
ON PO.OrganisationId = O.Id 
JOIN [dbo].[report_info] R (nolock) 
ON PO.ProductId = R.report_id 
JOIN .[dbo].[CONTENT_ProductTypes] PT (nolock) 
ON R.[product_type_id] = PT.PRODUCTTYPEID 
WHERE O.ShowCompanyPage = 1 
GROUP BY O.Id , o.Name, PT.PRODUCTTYPEID, pt.product_type_name 
+0

Этот запрос не похож на результат, который вы хотели в исходном вопросе. В '' Например, есть только 3 столбца. Эта информация важна. – JamieD77

+0

@ JamieD77 вы ошибаетесь. Количество столбцов не имеет отношения к вопросу – fourbeatcoder

+0

, поэтому, если вы сообщите нам, что вам нужен результат в 3 столбца, мы предполагаем, что вам нужно 5? – JamieD77

1

Написать GROUP BY заявления с ROLLUP, как это:

GROUP BY O.Id, o.Name, ROLLUP(PT.PRODUCTTYPEID, pt.product_type_name) 
+0

Я пытался выяснить, как это сделать с помощью rollup. Хорошая работа – JamieD77

+0

это не сработает, это дает мне 50% больше строк для каждой организации, все с нулевым именем o.Name и все в начале организации. См. Мой ответ для решения, которое сработало. – fourbeatcoder

+0

@ JamieD77 Это не правильное решение, даже если я использую «ROLLUP (pt.product_type_name)», это дает мне на 50% больше строк для каждой организации, каждая дополнительная строка с нулевым именем pt.product_type_name в начале организации. Мне нужна была одна дополнительная строка для каждой организации. См. Мой ответ, он работает: http://stackoverflow.com/a/33655766/976537 – fourbeatcoder

Смежные вопросы