2013-09-28 3 views
0

У меня есть 3 таблицывыбрать в 3 таблицы

table 1 "Sale" that saved date of user sale 
table 2 "ProductFactor" that saved factorid and productid in wich factoreid 
tabel 3 "Product" that saved productid and product name 

я хочу выбрать в 3 таблицы для этого результата:

показать пользователю factorid + цена + SaleDate + любое название продукта, который avalibe в этом factorid

но когда это делать, например, когда в один factorid, которые имеют 3 ProductID, является показать это:

date  factoreid name  price 
2013-09-25 1   x   18261256    
2013-09-25 1   y   2365560.0000 
2013-09-25 2   w   5500.0000 
2013-09-25 3   z   50000.0000 
2013-09-25 1   k   324.0000 

я хочу показать это:

date factoreid name  price 
2013-09-25 1 x,y,k  sum of 3 product name   
2013-09-25 2  w  5500.0000 
2013-09-25 3  z  50000.0000 
CREATE PROCEDURE [dbo].[GetUserSaleReport] 
@CurrentUserId uniqueidentifier 
AS 
BEGIN 
SELECT dbo.Sale.SaleDate,dbo.ProductFactor.FactoreId,dbo.Product.ProductName,dbo.Product.Price 
FROM Sale INNER JOIN ProductFactor ON 
dbo.Sale.FactoreId=dbo.ProductFactor.FactoreId 
INNER JOIN dbo.Product ON dbo.ProductFactor.ProductId=dbo.Product.ProductId 
WHERE dbo.Sale.UserId = @CurrentUserId AND dbo.Sale.FactoreId=dbo.ProductFactor.FactoreId AND dbo.ProductFactor.ProductId=dbo.Product.ProductId 
ORDER BY dbo.Sale.SaleDate 
END 
+0

Пожалуйста, добавьте SQL, который вы используете. –

+0

Очень сложно сказать, что происходит в этом вопросе. Пожалуйста, скорее добавьте фактические структуры таблиц и фактический запрос, который вы использовали для получения вашего вывода, а не пытаетесь объяснить его словами. – Dukeling

+0

@Emmentaler i edit my question – user2781200

ответ

2

Это может быть ваш запрос:

select date, factoreid,GROUP_CONCAT(name) , sum(price) 
from tablename 
group by factoreid 

См: http://sqlfiddle.com/#!2/284fd/5

+0

Выглядит, как OP использует SQL Server, а не MySQL, но я считаю, что некоторые версии SQL Server могут иметь эквивалентную функцию. Кроме того, однако, вы полагаетесь на опасную «функцию» в MySQL, которая возвращает только правильные результаты из-за данных примера; всегда либо 1) включать столбцы как часть предложения GROUP BY, либо 2) сделать их частью агрегатной функции. У любого другого есть возможность пойти неточно неправильно в неожиданные времена. –

+0

@ Clockwork-Muse: Спасибо за информацию. Но если я могу спросить, как все может пойти не так, если 2 очка, о которых вы упомянули, игнорируются. Есть ли уязвимость, которая может иметь место? – aaron

+1

По сути, это действительно легко увидеть, если у вас есть несколько индексов на таблице, и оптимизатор выбирает. [Этот пример] (http://sqlfiddle.com/#!2/7df1f/1) использует две таблицы, чтобы быть немного более ясными (и мне легче показать). Теперь, если это было для одной таблицы ... какой из двух запросов возвращает правильные результаты? Теоретически результаты могут измениться просто путем изменения столбцов порядка, перечисленных в _SELECT'_statement_ (подсказка - это плохо - SQL не должен заботиться о порядке столбцов). Это становится хуже, когда вы добавляете в миксы объединения и другие вещи. –

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