目前这是ASP Classic:
我现在的查询:
SELECT
i.CONCOM
, COALESCE(SUM(CASE WHEN C.CATEGORY_ID = '30' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
, COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId
FROM
INQUIRY AS i
INNER JOIN
TIMELOG AS t
ON t.INQUIRY_ID = i.INQUIRY_ID
INNER JOIN
PROD AS P
ON i.PROD_ID = P.PROD_ID
INNER JOIN
CATEGORY AS C
ON P.CATEGORY_ID = C.CATEGORY_ID
WHERE
" & sqlwhereclause & "
GROUP BY
i.CONCOM
ORDER BY
totalwithoutnew desc"
我需要连接的数据库,用于连接的字符串
DatabaseConnectionDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccessDBLocation & "data.mdb;Jet OLEDB:Database Password=redacted;"
在访问数据库中有一个名为tbl_customer的表,它有两个字段company和priority。我需要在i.concom和公司上进行联接,以便从第二个数据库中获取优先级。
我不会说谎,这远远超出我的范围,我会感激任何帮助:)
答案 0 :(得分:0)
我建议采用几种不同的方法。
将tbl_Customer数据复制到包含其他所有内容的数据库中。我最喜欢这个,因为以任何频率命中这个Access数据库必然会与将客户数据写入数据库的任何前端进程冲突。这里的挑战是定义适当的刷新率(每周,每天,每小时),以使您的应用保持最新,但不会影响访问。
实施可以是预定的拉动,如SSIS包,也可以通过类似于与客户表中的保存事件关联的宏的推送来推送。
此解决方案会将缓存的值放入ASP数据集对象中。当您执行我将转换为存储过程的查询时,我会通过user defined table type将数据集传递给proc,然后您可以在查询中加入该表。
我抛弃的最后一个选项是每次都要查询数据,然后将其加载到传递给查询的派生表中。它不漂亮,你必须滚动你自己的健全性检查以逃避刻度线',当你构建查询时,像这样
DECLARE
@query varchar(max)
, @dyanmic_where varchar(max)
SELECT @query = N'
SELECT
i.CONCOM
, COALESCE(SUM(CASE WHEN C.CATEGORY_ID = ''30'' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
, COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId
FROM
INQUIRY AS i
INNER JOIN
TIMELOG AS t
ON t.INQUIRY_ID = i.INQUIRY_ID
INNER JOIN
PROD AS P
ON i.PROD_ID = P.PROD_ID
INNER JOIN
CATEGORY AS C
ON P.CATEGORY_ID = C.CATEGORY_ID
INNER JOIN
(
-- this gets built dynamically based on retrieved values
SELECT 1, ''hello kitty'', 0
UNION ALL 2, '''', 3
) D (concom, company, priority)
ON D.concom = i.CONCOM
WHERE
'+ @dyanmic_where + N'
GROUP BY
i.CONCOM
ORDER BY
totalwithoutnew desc
'
EXECUTE(@query)
如果其中任何一个引起你的兴趣,请告诉我,我很乐意提供更多详情