SQL, чтобы выбрать самый верхний столбец с определенным условием - PullRequest
1 голос
/ 11 апреля 2011

У меня есть таблица счетов-фактур, подобная этой:

Bill    Item    Qty Weight  Rate     Amount Advance
10001   Dal     1   10.00     70.00  700.00 500.00
10001   Jeera   2    0.60   1200.00  720.00 500.00
10002   Bread   1    0.80     50.00   40.00   0.00
10003   Coffee  1    1.00    700.00  700.00   0.00
10004   Tea     1    0.70    900.00  700.00   0.00

Обратите внимание, что для счета № 10001 общий аванс составляет всего 500, но он повторяется дважды для предметов - Даль и Джира.Мне нужен SQL, чтобы показать только одну сумму аванса против Дала или Джиры, которая имеет максимальную сумму, подобную этой:

Bill    Item    Qty Weight   Rate    Amount Advance
10001   Dal     1   10.00     70.00  700.00   0.00
10001   Jeera   2   0.60    1200.00  720.00 500.00
10002   Bread   1   0.80      50.00   40.00   0.00
10003   Coffee  1   1.00     700.00  700.00   0.00
10004   Tea     1   0.70     900.00  700.00   0.00

Единственное изменение здесь - для счета № 10001, пункт Dal, сумма аванса равна 0.Пожалуйста, помогите мне добиться этого в SQL Server.
Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011
;with cte as
(
  select *,
    row_number() over(partition by Bill order by Advance desc) as rn
  from YourTable
)
select
  C.Bill,
  C.Item,
  C.Qty,
  C.Weight,
  C.Rate,
  C.Amount,
  case C.rn when 1 then C.Advance else 0 end as Advance
from cte as C
0 голосов
/ 11 апреля 2011

Смысл в том, что ваш стол не нормализован.

Я предлагаю разбить его на более мелкие таблицы

Возможно что-то вроде:

+- Bills -------+
|               |
|  BillNo INT   |
+---------------+

+- Items ------------+
|                    |
|  Item varchar(20)  |
+--------------------+

+- BillItems --------+
|                    |  
|  BillNo INT        |
|  Advance MONEY     |
+--------------------+

Затем вы сохраняете сумму аванса в отношении самого гранулированного объекта в вашей таблице, а именно «Предмета».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...