Выберите группу записей на основе одной записи в группе - PullRequest
0 голосов
/ 24 февраля 2011

Кажется, я застрял в проблеме.Я использовал Crystal Reports 2008, чтобы вытащить список записей из базы данных MS-SQL.Здесь задействованы две таблицы (они содержат данные заказа для подписчиков).Первая таблица - это OrderMst, а вторая - OrderDtl.Они объединены двумя полями, Account и SubNumber.Каждая учетная запись имеет много SubNumbers, и каждый SubNumber имеет много InvoiceNumbers.В каждой строке счета-фактуры есть столбец, который сообщает мне, является ли это самым последним счетом.Мне нужно просмотреть эту запись, чтобы определить, активен ли клиент, отменен или истек срок его действия.Затем, в зависимости от их статуса, мне нужно выбрать все счета для этого SubNumber.Я застрял, пытаясь найти способ сделать это.

Вот пример:

OrderMst:

Account     SubNumber Pub
72781651    0025      NAVL
72781651    0012      RYIR
72781651    0001      RHCS
80156287    0015      VGFA
80156287    0012      NAVL

OrderDtl:

Account     SubNumber InvoiceNumber PubStatus RenewalThere
72781651    0025      15894578      A         0
72781651    0025      15754897      R         1
72781651    0025      15753412      R         1
72781651    0012      15753357      C         0
72781651    0012      15749875      R         1
72781651    0001      15465874      X         0
72781651    0001      15425789      R         1
80156287    0015      15656738      A         0
80156287    0012      15387956      C         0
80156287    0012      15324568      R         1

Таким образом, если бы я искал количество всех счетов для активных подписок, я бы выбрал {OrderDtl.RenewalThere} = 0, и результаты моего отчета показали бы, что Счет 72781651 Субнамер 0025 имеет 3 счета, а Счёт 80156287 Субнамер 0015 имеет 1 счет.Вот где я застрял.Мне нужно использовать одну запись уровня счета-фактуры, чтобы сообщить мне, какую подписку я хочу, а затем получить все записи уровня счета-фактуры для этого счета-фактуры.Есть идеи?

1 Ответ

1 голос
/ 24 февраля 2011

То, что вы хотите, является полусоединением:

SELECT Account, SubNumber, COUNT(*)
  FROM OrderDtl
 WHERE EXISTS (
   SELECT *
     FROM OrderDtl AS a
    WHERE a.Account = OrderDtl.Account
      AND a.SubNumber = OrderDtl.SubNumber
      AND a.PubStatus = 'A'
      AND a.RenewalThere = 0
)
GROUP BY Account, SubNumber

HTH

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