Mahesh Pattnayak Ответов: 2

Как объединить две таблицы с каким-то определенным условием с помощью Microsoft SQL server 2008 ?


Я использую Microsfot SQL SERVER 2008

у меня два стола..

покупатель стол и customer_trasaction стол

покупатель таблица имеет первичный ключ customer_id

customer_transaction таблица имеет внешний ключ customer_id.

все транзакции, выполненные клиентом, добавляются в таблицу транзакций клиента.

данные таблицы клиентов
customer_id	Customer_Name	Address		        contact
32552		Mahesh pattn    New delhi, india	9090909090
32553		Raj kumar 	New delhi, india	9923992939


структура таблицы транзакций клиентов
Customer_Id	Ticket		Trasactionn_Name	Transaction_date	
1	32552		6140332552	ORDER CREATED		2016-03-14 18:04:57.027	
45	32552		6140332552	PART NOT AVAILABLE	2016-03-15 09:37:53.217	
1544	32552		6140332552	IN-TRANSIT TO FSL		2016-03-23 00:19:59.613	
2045	32552		6140332552	IN-TRANSIT TO CUSTOMER	2016-03-28 12:15:01.743	
3288	32552		6140332552	IN-TRANSIT TO CUSTOMER	2016-03-29 11:23:56.277		


теперь мой вопрос таков..

select cust.customer_id, cust.CustomerName , cust.TicketNo, trans.Transaction_name, trans.transaction_date
from mstCustomer cust inner join Transaction_details trans
where cust.Customer_id=trans.customer_id


я хочу показать данные клиента в отчете с информацией о транзакции..
теперь в таблице транзакций трасакция может быть повторной.. но мы должны найти текущую транзакцию и предыдущую транзакцию с датой..

и условие текущей и предыдущей транзакции не должно быть одинаковым..

теперь я хочу показать результат вот так..
Customer_id	Customer_Name	Current_Trasaction		Current_Transaction_date	Previous_Transaction	Previous_Transaction_Date
32552		Mahesh pattnayak	IN-TRANSIT TO CUSTOMER	2016-03-29 11:23:56.277	IN-TRANSIT TO FSL		2016-03-23 00:19:59.613


Как получить этот результат ??

заранее спасибо..

Richard Deeming

Нет, это не срочно для неоплачиваемых добровольцев, которые отвечают здесь на вопросы. Попытка добавить ощущение срочности к вашему вопросу очень груба и, скорее всего, отбьет у людей охоту отвечать.

Вы также не сказали нам, какую СУБД вы используете.

Нажмите на зеленую ссылку "улучшить вопрос" в нижней части вашего вопроса. Уберите строку "это срочно". Удалите текст "сломанная клавиша CAPS-LOCK". И добавьте имя и версию СУБД, которую вы используете.

Mahesh Pattnayak

- Простите, сэр..

Mahesh Pattnayak

я совершенно не понимаю, что делать с этим запросом..

RossMW

Неясно, что определяет текущие и предыдущие транзакции. Это только 2 верхних упорядоченных по убыванию transactiondate?

2 Ответов

Рейтинг:
2

ProgrammingEnthusiast

что вы имеете в виду под текущей транзакцией? это сделка на сегодня ? а предыдущая транзакция - это все транзакции с самого начала и до вчерашнего дня?


Richard Deeming

Не публикуйте комментарии в качестве решений. Нажмите кнопку "есть вопрос или комментарий?" нажмите кнопку под вопросом и вместо этого оставьте комментарий.

Рейтинг:
1

RossMW

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

Во-первых, проще создать представление ниже, чтобы показать, как получить данные в разные столбцы. его нужно будет изменить, чтобы включить дополнительные данные и фильтры по мере необходимости.

напр.

SELECT top 2 
case when row_number() over(order by Transactiondate) = 1 then Transaction else '' end as [Current],  
case when row_number() over(order by Transactiondate) = 2 then Transaction else '' end as [Previous],  
row_number() over(order by eventdate) as row
FROM customer_transaction


Затем объедините текстовые поля (одно будет "и одно будет иметь данные") в одну строку.

напр.

SELECT STUFF((SELECT ',' + [Current] FROM View1 FOR XML PATH('')) ,1,1,'') AS [Current], STUFF((SELECT ',' + [Previous] FROM View1 FOR XML PATH('')) ,1,1,'') AS [Previous]


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

Хорошая статья по второй части-это

Преобразование значений строк в таблице в одну объединенную строку - SQLMatters[^]