多个结果导致一个结果,应用程序限制

时间:2011-03-17 17:56:36

标签: sql sql-server tsql

我正在使用名为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限制)如果可能的话,我还需要在每个值之间插入一个手动返回,以便在我将这些信息提取到的文档中将它们分开。

Case Aware没有任何用户手册,你需要付费支持(我们确实拥有它),但我怀疑他们的能力。我能够轻松创建他们过去告诉我的查询是不可能的。我希望这是其中一次。

IntegrationGirly

Addtl FYI:

我目前有这个kludge:即使它是空的,也可以从数据库中单独提取每个值,并将每个值放入文档中的表中。 (30个单独的搜索)它“有效”但文档生成需要更长的时间,并且还留下了大量的空白空间。有些情况有3个值,大多数有5到10但我们有多达30个区域的速率,因为一旦在蓝色的月亮我们需要它们。这使得模板看起来非常垃圾,但这并不会影响生成文档的律师,因为他们没有看到它,但每次生成表格时都必须取出所有空列。随着我们每天所做的文档数量的增加,1)这变得耗费时间; 2)这使得律师和法律助理知道如何从单词中取出行。

3 个答案:

答案 0 :(得分:1)

我有一个类似的查询要在我的应用程序中实现。这应该有用。

DECLARE @Rate VARCHAR(8000) 
SELECT @Rate = COALESCE(@Rate + ', ', '') + rate 
From case_fin_info where fin_info_id = 7    and rate!=0;

答案 1 :(得分:1)

首先,我对使用这种糟糕的软件表示哀悼。

其次,这是一个可能的解决方案(假设是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>

替换&lt;&gt;中的内容作为适当的。基本上,您可以在客户端应用程序中获取行数,然后一次获取一行。它本身效率低下,但如果你只有15行就不会太糟糕。

答案 2 :(得分:0)

这是一个将在单个列中返回一个结果的查询。假设您的手动返回是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