несколько результатов в одном результате, ограничения приложения - PullRequest
1 голос
/ 17 марта 2011

Я работаю с легальным программным обеспечением Case Aware. Вы можете выполнять ограниченный поиск по SQL, и мне повезло, что Case Aware извлекла конкретное значение из базы данных. Моя проблема заключается в том, что мне нужно создать поиск SQL, который возвращает несколько значений, но программное обеспечение Case Aware будет принимать только один результат в качестве ответа. Если мой запрос создает список, он распознает только верхнее значение. Это ограничение программного обеспечения, которое я не могу обойти.

Мой самый простой поиск:

select rate
From case_fin_info
where fin_info_id = 7 and rate!=0

Это должно привести к списку из 3-15 оценок, который выполняется, когда поиск запускается прямо из базы данных. Тем не менее, при запуске через Case Aware, только первая ставка в таблице будет тянуть. Мне нужно вытащить значения через Case Aware, потому что с Case Aware я могу автоматически вставить результаты в шаблон. (Там, где я работаю, генерируются сотни, если не тысячи в день, поэтому делать это вручную - B $ @ #%!)

Мне нужно найти способ вывести все значения из поиска в одно значение. Я не могу использовать XML (Case Aware выдаст ошибку) и не могу создать временную таблицу. (Опять же, ограничение с учетом регистра). Если возможно, мне также нужно вставить возврат вручную между каждым значением, чтобы они были разделены в документе, в который я передаю эту информацию.

У Case Aware нет руководства пользователя, и вы платите за поддержку (у нас она есть), но у меня есть сомнения относительно их способностей. Я был в состоянии легко создать запросы, которые они сказали мне в прошлом, невозможны. Я надеюсь, что это один из тех времен.

IntegrationGirly

Добавление к сведению:

В настоящее время у меня есть этот кладж: извлечение каждого значения из базы данных индивидуально, даже если оно равно нулю, и помещение каждого значения в таблицу в документе. (30 отдельных поисков). Он «работает», но генерирует документ намного дольше, а также оставляет много пустого пространства. В некоторых случаях есть 3 значения, в большинстве - 5-10, но у нас есть до 30 областей для оценки, потому что однажды в голубой луне они нам нужны. Это делает шаблон ужасно бесполезным, но это не влияет на юристов, которые генерируют документы, так как они не видят его, но каждый раз, когда они генерируют таблицу, им приходится убирать все пустые столбцы. Из-за количества документов, которые мы делаем каждый день, 1) это отнимает много времени и 2) предполагается, что адвокаты и юристы знают, как извлечь строки из таблиц в слове.

Ответы [ 3 ]

1 голос
/ 17 марта 2011

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

Во-вторых, вот возможное решение (предполагается, что SQL Server):

1) Выполните SELECT COUNT(*) FROM case_fin_info WHERE fin_info_id = 7 AND rate <> 0.Сохраните результат (количество строк) в своем клиентском приложении.

2) В своем клиентском приложении выполните цикл for (i = 0; i < count; i++).Во время каждой итерации выполняйте запрос

WITH OrderedRates AS
(
   SELECT Rate, ROW_NUMBER() OVER (ORDER BY <table primary key> ASC) AS 'RowNum'
   FROM case_fin_info WHERE fin_info_id = 7 AND rate <> 0
)
SELECT Rate FROM OrderedRates WHERE RowNum = <count>

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

1 голос
/ 17 марта 2011

У меня был похожий запрос для реализации в моем приложении.Это должно работать.

DECLARE @Rate VARCHAR(8000) 
SELECT @Rate = COALESCE(@Rate + ', ', '') + rate 
From case_fin_info where fin_info_id = 7    and rate!=0;
0 голосов
/ 17 марта 2011

Вот один запрос, который вернет один результат в одном столбце.Предполагается, что ваш ручной возврат CR + LF.И вам нужно будет расширить его для обработки всех 15 ставок.

SELECT max(Rate1) + CHAR(13) + CHAR(10)
    + max(Rate2) + CHAR(13) + CHAR(10)
    + max(Rate3) + CHAR(13) + CHAR(10)
    + max(Rate4) + CHAR(13) + CHAR(10)
    + max(Rate5) + CHAR(13) + CHAR(10)
FROM (
    SELECT CASE RateID WHEN 1 THEN CAST(rate as varchar) END AS Rate1,
        CASE RateID WHEN 2 THEN CAST(rate as varchar) END AS Rate2,
        CASE RateID WHEN 3 THEN CAST(rate as varchar) END AS Rate3,
        CASE RateID WHEN 4 THEN CAST(rate as varchar) END AS Rate4,
        CASE RateID WHEN 5 THEN CAST(rate as varchar) END AS Rate5
    FROM
        (
        select RateID, rate From case_fin_info where fin_info_id = 7 and rate!=0
        ) as r
    ) as Rates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...