Запрос выбора SQL, где все строки должны иметь одинаковое значение - PullRequest
2 голосов
/ 26 января 2011

Мне нужно сгенерировать счет из списка заказов.

У меня есть запрос, где я получаю все заказы, которые еще не были оплачены (paid_date = null), но проблема в том, что некоторые заказы имеют разные налоговые коды Теперь я могу комбинировать заказы с одинаковым налоговым кодом в этом запросе.

Я думал о чем-то похожем ниже, но это, очевидно, не работает:

SELECT * from orders 
WHERE paid_date IS NULL AND tax_code = MAX(tax_code);

Почти как обратный отчетливый.

UPDATE:
Извините, я думаю, вопрос был неясным. Я не ищу налоговый кодекс. Я ищу список заказов, которые имеют одинаковый налоговый кодекс. Но мне все равно, какой это код. Это на самом деле просто мера безопасности, обычно все налоговые коды одинаковы, но в редких случаях они разные. В этом случае пользователю необходимо создать 2 отдельных счета.

Какие-нибудь простые идеи?

Ответы [ 4 ]

2 голосов
/ 26 января 2011

Вам необходимо будет указать другой столбец, который не противоречит налоговому коду, например, например, customer_ID (например);

Получить список кодов tax_co для текущего клиента:

SELECT customer_ID, tax_code
FROM Orders
WHERE customer_ID = 'some customer ID'
GROUP BY customer_ID, tax_code

Приведенный выше запрос вернет количество отдельных строк, поэтому, если есть 2 кода_счета;Затем вы получаете 2 строки, и вам нужно сгенерировать 2 счета;

Затем вы можете запросить, как другие показали:

SELECT * FROM Orders
WHERE paid_date IS NULL
AND tax_code = 'first tax code from your first query'

Это будет включать в себя несколько поездок в БД.Или вы можете написать хранимую процедуру, использовать временные таблицы и вернуть несколько наборов (несколько инструкций SELECT), каждый из которых содержит табличный список заказов по коду_класса.

Альтернативно, если вы используете SQL (не знаюо MySQL) вы можете написать запрос SQL XML, который будет возвращать иерархические данные по customer_id и tax_code.

Помогает ли это?

1 голос
/ 26 января 2011

Придерживаясь исходного запроса, подзапрос сделает это:

SELECT * from orders 
 WHERE paid_date IS NULL 
   AND tax_code = (
       select max(tax_code)
         from orders
        where paid_date is null
   )
0 голосов
/ 26 января 2011

В этом примере я произвольно выбрал код tax_code из списка заказов, поскольку вы не предоставили нам никаких подробностей о том, как будет выбран выбранный код tax_code.

Select ..
From Orders As O
    Join    (
            Select O1.tax_code
            From Orders As O1
            Limit 1
            ) As Z
        On Z.tax_code = O.tax_code
Where paid_date Is Null

Проблема здесь в том, что подзапрос может найти код_счета, связанный только с одним заказом, тогда как подавляющее большинство заказов связано с другим кодом_счета Другое решение, которое находит «самый распространенный» налоговый кодекс, было бы:

Select ..
From Orders As O
    Join    (
            Select O1.tax_code
            From Orders As O1
            Group By O1.tax_code
            Order By Count(*) Desc
            Limit 1
            ) As Z
        On Z.tax_code = O.tax_code
Where paid_date Is Null
0 голосов
/ 26 января 2011

Вы должны сделать заказ по tax_code и получите список заказов по tax_code:

select * from orders
  where paid_date is null
 order by tax_code

Затем повторите ваши результаты.Всякий раз, когда у вас есть отдельный tax_code, генерируйте новый счет.

A group_concat может дать вам то, что вы хотите:

select tax_code, group_concat(order_id order by order_id) from orders
  where paid_date is null
 group by tax_code
-- optionally you can use a LIMIT 1 if you just want orders for the first tax_code
...