SQL - 如何根据参数从不同的表中返回值 第一次海报,长期读者: 我正在使用自定义Excel函数,它允许传递参数并构建一个返回值的SQL字符串。这工作正常。但是,我想根据传递的参数在各种表中进行选择。
目前我有两个使用SQL语句的工作函数如下所示:
_______功能一________
<SQLText>
SELECT PRODDTA.TABLE1.T1DESC as DESCRIPTION
FROM PRODDTA.TABLE1
WHERE PRODDTA.TABLE1.T1KEY = '&PARM02'</SQLText>
_______功能二________
<SQLText>
SELECT PRODDTA.TABLE2.T2DESC as DESCRIPTION
FROM PRODDTA.TABLE2
WHERE PRODDTA.TABLE2.T2KEY = '&PARM02'</SQLText>
所以我在Excel中使用IF逻辑来检查第一个参数并决定使用哪个函数。
如果我能做一个可以根据第一个参数选择正确的表的SQL语句会好得多。逻辑上是这样的:
_______功能组合________
IF '&PARM02' = “A” THEN
SELECT PRODDTA.TABLE1.T1DESC as DESCRIPTION
FROM PRODDTA.TABLE1
WHERE PRODDTA.TABLE1.T1KEY = '&PARM02'
ELSE IF '&PARM02' = “B” THEN
SELECT PRODDTA.TABLE2.T2DESC as DESCRIPTION
FROM PRODDTA.TABLE2
WHERE PRODDTA.TABLE2.T2KEY = '&PARM02'
ELSE
DESCRIPTION = “”
基于另一篇帖子Querying different table based on a parameter,我尝试了这种确切的语法,但没有成功
<SQLText>
IF'&PARM02'= "A"
BEGIN
SELECT PRODDTA.F0101.ABALPH as DESCRIPTION
FROM PRODDTA.F0101
WHERE PRODDTA.F0101.ABAN8 = '&PARM02'
END ELSE
BEGIN
SELECT PRODDTA.F4801.WADL01 as DESCRIPTION
FROM PRODDTA.F4801
WHERE PRODDTA.F4801.WADOCO = '&PARM02'
END</SQLText>
答案 0 :(得分:0)
您可以尝试使用JOIN语句。
http://www.sqlfiddle.com/#!9/23461d/1
这是一个显示两个表的小提琴。 以下代码片段将使用Key作为匹配逻辑,为您提供两个表中的值。
$scope.newincidents = [];
$scope.NextIncidents = function() {
var urlnext = $scope.nextincidents;
if (!urlnext) {
$("#infinite").prop("disabled", true);
} else {
$("#infinite").prop("disabled", false);
}
var mycookie = $cookieStore.get('Token');
$http({
method: 'GET',
url: urlnext,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Token': '\UsernameToken Token="' + mycookie + '"',
},
}).success(function(data, status) {
$scope.newincidents = data._embedded.incidents;
var nextLink = data._links.next;
$scope.nextincidents = nextLink ? nextLink.href : null;
for (var n in $scope.incidents) {
var month = new Date($scope.newincidents[n].upload_date).getMonth();
$scope.incidents.push($scope.newincidents[n]);
$scope.loadIncidents();
};
}).error(function(data, status, headers, config) {
return false;
});
$scope.loadIncidents();
};
答案 1 :(得分:0)
这是一种方法。如果PARM03 =&#39;使用表1&#39;然后联盟的上半部分将返回记录,反之亦然。尽管如此,这不一定是产品的良好表现。您应该考虑以这种方式存储数据的原因。看起来你在不同的表中划分数据这是一个坏主意。
SELECT PRODDTA.TABLE1.T1DESC as DESCRIPTION
FROM PRODDTA.TABLE1
WHERE PRODDTA.TABLE1.T1KEY = '&PARM02'
AND &PARM03='Use Table1'
UNION ALL
SELECT PRODDTA.TABLE2.T2DESC as DESCRIPTION
FROM PRODDTA.TABLE2
WHERE PRODDTA.TABLE2.T2KEY = '&PARM02'</SQLText>
AND &PARM03='Use Table2'