在Yellowfin想要返回一个值,我有3个表调用 会员资格, membershipPlans, membershipUDPs。
成员是与其他两个人有外连接的主要成员(链接可能存在或可能不存在)
所以如果MemberPlans.PrevFundID有一个我想要的条目, 否则,如果他们加入不到3个月前我想要MembershipUDPs.Property 否则我想要一个文字短语。
目前我每个成员资格获得2行。成员名单,一个显示PRevFundID,另一个显示MembershipsUDP,我只想要一行: 显示的sql是通过Yellowfin生成的
SELECT DISTINCT
"Memberships"."MemberNo",
CASE
WHEN PrevFundID IS NOT NULL THEN PrevFundID
ELSE
CASE
WHEN JOINDATE >= DATEADD(mm, -3, GETDATE()) THEN Property
ELSE 'New to PHI'
END
END,
"MembershipPlans"."PrevFundID",
"MembershipUDPs"."Property"
FROM "dbo"."Memberships"
LEFT OUTER JOIN "dbo"."MembershipPlans"
ON ("Memberships"."MemberNo" = "MembershipPlans"."MemberNo")
LEFT OUTER JOIN "dbo"."MembershipUDPs"
ON ("Memberships"."MemberNo" = "MembershipUDPs"."MemberNo")
AND ("MembershipUDPs"."PropertyID" = N'TF')
WHERE ("Memberships"."IsProspect" = N'N')
AND ("Memberships"."JoinDate" BETWEEN '20140701 00:00:00.0' AND
'20150630 23:59:59.997'
AND ("Memberships"."PaidToDate" >= "Memberships"."JoinDate"
OR "Memberships"."TermDate" IS NULL)
)
我在收到有关完整代码的评论后对此进行了编辑
答案 0 :(得分:1)
LEFT OUTER JOIN链在这里引起了问题。您希望从MembershipPlans表或 MembershipUDPS表中 行,但不能同时使用两者。 SQL中也存在一些无关的条件;你不需要两个案例陈述,并且parens可能会绊倒你(事实上他们可能会绊倒 me up,这段代码很难阅读)。
试试这个:
SELECT DISTINCT
"Memberships"."MemberNo",
CASE
WHEN PrevFundID IS NOT NULL THEN PrevFundID
WHEN JOINDATE >= DATEADD(mm, -3, GETDATE()) THEN Property
ELSE 'New to PHI'
END,
"MembershipPlans"."PrevFundID",
NULL
FROM "dbo"."Memberships"
INNER JOIN "dbo"."MembershipPlans"
ON "Memberships"."MemberNo" = "MembershipPlans"."MemberNo"
WHERE "Memberships"."IsProspect" = N'N'
AND "Memberships"."JoinDate" BETWEEN '20140701 00:00:00.0' AND '20150630 23:59:59.997'
AND ("Memberships"."PaidToDate" >= "Memberships"."JoinDate"
OR "Memberships"."TermDate" IS NULL)
UNION ALL
SELECT DISTINCT
"Memberships"."MemberNo",
CASE
WHEN PrevFundID IS NOT NULL THEN PrevFundID
WHEN JOINDATE >= DATEADD(mm, -3, GETDATE()) THEN Property
ELSE 'New to PHI'
END,
NULL,
"MembershipUDPs"."Property",
FROM "dbo"."Memberships"
INNER JOIN "dbo"."MembershipUDPs"
ON "Memberships"."MemberNo" = "MembershipUDPs"."MemberNo"
WHERE "Memberships"."IsProspect" = N'N'
AND "Memberships"."JoinDate" BETWEEN '20140701 00:00:00.0' AND '20150630 23:59:59.997'
AND ("Memberships"."PaidToDate" >= "Memberships"."JoinDate"
OR "Memberships"."TermDate" IS NULL)
如果你想要相同的列,那么取出投影列表中的NULL(查询顶部的SELECT ...NULL
)。
答案 1 :(得分:1)
嗨,我最终解决了这个问题。我使用外连接的原因是因为表之间的关系不是很多,但我使用子查询重写了查询。 SQL的格式是通过Yellowin创建的:
var posts = $http.get(...).then(function(response){
return response.data.items;
});
return {
getList: function(){
return posts;
}
}
// Call getList() the same way as above