我正在使用名为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)这使得律师和法律助理知道如何从单词中取出行。
答案 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