【发布时间】:2016-03-17 18:16:44
【问题描述】:
此报告的结果列出了同一个客户 7-9 次。我不完全确定为什么。尝试过 GROUPING 和 DISTINCT。 DISTINCT 将结果细化为每个客户端仅 3 个重复项。
也许我忽略了一些明显的东西。
简而言之,我得到了
客户 ID |名字 |姓氏
123.......约翰........................约翰
123.......约翰........................约翰
123.......约翰........................约翰
456.......................鲍勃......................鲍勃
456.......................鲍勃......................鲍勃
456.......................鲍勃......................鲍勃
我需要什么:
客户 ID |名字 |姓氏
123.......约翰........................约翰
456.......................鲍勃......................鲍勃
但是 GROUP BY 或 DISTINCT 不能解决问题。
SELECT
c.clientID
,c.firstName AS 'First_Name'
,c.lastName AS 'Last_Name'
,c.homePhone AS 'Home'
,c.cellPhone AS 'Cell'
,NULL AS '------'
,CASE
WHEN ccf.name LIKE 'First Contact Date' THEN ccv.TextVal
END AS 'First_Contact_Date'
,CASE
WHEN ccf.name LIKE 'Referral Date' THEN ccv.DateVal
END AS 'Referral_Date'
,CASE
WHEN ccf.name LIKE 'Referred By' THEN ccv.TextVal
END AS 'Referred_By'
,CASE
WHEN ccf.name LIKE 'Intake Date' THEN ccv.DateVal
END AS 'Intake_Date'
,CASE
WHEN ccf.name LIKE 'Intake By' THEN ccv.TextVal
END AS 'Intake_By'
,CASE
WHEN ccf.name LIKE 'Orientation Date' THEN ccv.TextVal
END AS 'Orientation_Date'
,CASE
WHEN civ.clientIndexID = 5 THEN civ.clientIndexValueName
END AS 'Primary_Language'
,NULL AS '------'
,CASE
WHEN civ.clientIndexID = 18 THEN civ.clientIndexValueName
END AS 'Type'
,CASE
WHEN civ.clientIndexID = 20 THEN civ.clientIndexValueName
END AS 'Stage_at_intro'
,CASE
WHEN civ.clientIndexID = 21 THEN civ.clientIndexValueName
END AS 'Current_stage'
,NULL AS '------'
,CASE
WHEN civ.clientIndexID = 19 THEN civ.clientIndexValueName
END AS 'Percentage'
,CASE
WHEN civ.clientIndexID = 26 THEN civ.clientIndexValueName
END AS 'Location'
,CASE
WHEN civ.clientIndexID = 27 THEN civ.clientIndexValueName
END AS 'Eligible?'
FROM clients c
INNER JOIN tblClientCustomValues ccv
ON c.clientID = ccv.clientID
INNER JOIN tblClientCustomFields ccf
ON ccv.ID = ccf.ID
INNER JOIN tblClientIndexData cid
ON c.clientID = cid.clientID
INNER JOIN tblClientIndexValue civ
ON cid.clientIndexValueID = civ.clientIndexValueID
GROUP BY c.clientID
,c.firstName
,c.lastName
,c.homePhone
,c.cellPhone
,ccf.name
,ccv.TextVal
,ccv.DateVal
,civ.clientIndexValueName
,civ.clientIndexID
有关表格的更多信息:
tblClientCustomFields ccf:
ID |姓名 |类型ID
tblClientIndexData cid:
ClientIndexValueID |客户编号
tblClientIndexValue civ:
ClientIndexValueID |客户索引 ID |客户索引值名称
tblClientCustomValues ccv:
ID |客户ID |文本值 |日期值 |数值
【问题讨论】:
-
您的 select 语句中的列比您说的 3 列要多得多。我的猜测是您的其中一个连接有问题。很可能是在至少一个连接中缺少第二个连接谓词(意味着您需要一个 AND)。没有表定义和数据虽然无法确定。
-
对不起,肖恩,我在上面压缩了我正在寻找的内容,以便更容易理解(更少的列)。
-
很可能是因为您要从 customFields 表(或其他表)中提取多行。您可能必须在该表中执行诸如枢轴之类的操作,以使您的所有记录都在一条记录中。否则,您将在查询中为您拥有的每个自定义字段创建单独的记录。了解有关表结构的更多信息将有助于弄清楚。
标签: sql-server group-by distinct