Member 13817076 Ответов: 1

Как сгруппировать информацию о таблице в две группы


У меня есть таблица счетов-фактур продаж с именами полей режим оплаты, сумма наличных денег, сумма карты, и мне нужно сгруппировать все мои счета-фактуры по двум группам кассовый счет/карточный счет.
если режим оплаты-наличные, то поле Сумма карты равно 0. если мод оплаты-карта, то поле сумма наличных равно 0. если мод оплаты-это и наличные, и карта(ситуация, когда клиент платит наличными, а остаток средств-картой), то оба поля содержат значение.

Проблема в том, что когда режим оплаты является обоими, мой счет-фактура должен идти в обеих группах.
Пожалуйста, помогите мне

Что я уже пробовал:

Выберите случай, когда cash_amount=0 и card_amount!=0, а затем "карточный счет"
когда card_amount=0 и cash_amount!=0, то 'счета наличных денег'
когда cash_amount!=0 и card_amount!=0, то "
еще " конец как BillTyps

Maciej Los

Что вы подразумеваете под "Когда режим оплаты является обоими, мой счет должен идти в обеих группах"?

Wendelius

Пожалуйста, опубликуйте некоторые примеры данных для работы

1 Ответов

Рейтинг:
1

Maciej Los

Я не уверен, что хорошо вас понимаю, но проверьте это:

DECLARE @invoice TABLE(payment_mode VARCHAR(30), cash_amount DECIMAL(8,2), card_amount DECIMAL(8,2))

INSERT INTO @invoice(payment_mode, cash_amount, card_amount)
VALUES('cash', 500, 0), ('cash', 255, 0),
('card', 0, 1500), ('card', 0, 299),
('cash', 111, 0), ('cash', 222, 0),
('card', 0, 88), ('card', 0, 77),
('cash and card', 200, 300), ('cash and card', 300, 200)

;WITH CTE AS
(
	SELECT *
	FROM @invoice
	WHERE payment_mode <>'cash and card'
	UNION ALL
	SELECT 'cash', cash_amount, 0
	FROM @invoice
	WHERE payment_mode ='cash and card'
	UNION ALL
	SELECT 'card', 0, card_amount 
	FROM @invoice
	WHERE payment_mode ='cash and card'
)
SELECT C.*, CASE WHEN C.payment_mode = 'cash' THEN 'CashBill' ELSE 'CardBill' END AS BillType 
FROM CTE AS C

Результирующий набор содержит 12 записей, поскольку данные "наличные и карты" были "разбиты" на 4 строки (вместо 2).


Wendelius

Приятно!

Maciej Los

Спасибо, Мика.

Member 13817076

Это работает. Спасибо

Maciej Los

Всегда пожалуйста.
Пожалуйста, примите мой ответ как решение - фомрально - удалить ваш вопрос из списка без ответа.
Овации,
Мацей