【发布时间】:2017-07-03 04:49:04
【问题描述】:
我正在尝试根据其中一列的最大日期拉回一行详细信息。做一个简单的 max(date.field) 不适用于我的表。我最初是通过利用我使用此资源See the entry by Tom H. 构建的此查询来解决该问题的:
SELECT
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME AS CLIENT_NAME,
PART_BILL1.PART_CAT_CODE AS BILLING_CODE,
PART_BILL1.EMPL_UNO AS BILLING_NAME_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME AS BILLING_NAME,
PART_BILL1.PERCENTAGE AS BILLING_PERCENTAGE
FROM
HBM_CLIENT
INNER JOIN
HBM_NAME ON HBM_CLIENT.NAME_UNO = HBM_NAME.NAME_UNO
LEFT OUTER JOIN
TBM_CLMAT_PART AS PART_BILL1 ON PART_BILL1.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN
TBM_CLMAT_PART AS PART_BILL2 ON PART_BILL2.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL2.EFF_DATE > PART_BILL1.EFF_DATE
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN
HBM_PERSNL AS HBM_PERSNL_BILL ON PART_BILL1.EMPL_UNO = HBM_PERSNL_BILL.EMPL_UNO
GROUP BY
HBM_CLIENT.CLIENT_CODE, HBM_NAME.NAME,
PART_BILL1.PART_CAT_CODE, PART_BILL1.EMPL_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME,
PART_BILL1.PERCENTAGE,
ORDER BY
HBM_CLIENT.CLIENT_CODE
这个查询的问题是,由于某种原因,它并没有拉回所有的结果,原因是因为我使用的解决方案。
我想知道使用 case 语句是否更有意义,但我对 case 语句不是很熟悉。
这是我正在处理的查询:
`SELECT
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME AS CLIENT_NAME,
PART_BILL1.PART_CAT_CODE AS BILLING_CODE,
PART_BILL1.EMPL_UNO AS BILLING_NAME_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME AS BILLING_NAME,
PART_BILL1.PERCENTAGE AS BILLING_PERCENTAGE,
Part_BILL1.EFF_DATE,
CASE
WHEN
MAX(Part_BILL1.EFF_DATE) > Part_BILL1.EFF_DATE THEN max(Part_BILL1.EFF_DATE) ELSE Part_BILL1.EFF_DATE END
FROM HBM_CLIENT
INNER JOIN HBM_MATTER
ON HBM_CLIENT.CLIENT_UNO = HBM_MATTER.CLIENT_UNO
INNER JOIN HBM_NAME
ON HBM_CLIENT.NAME_UNO = HBM_NAME.NAME_UNO
LEFT OUTER JOIN TBM_CLMAT_PART AS PART_BILL1
ON PART_BILL1.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN HBM_PERSNL AS HBM_PERSNL_BILL
ON PART_BILL1.EMPL_UNO = HBM_PERSNL_BILL.EMPL_UNO
WHERE
(HBM_CLIENT.CLIENT_CODE = '065011')
GROUP BY
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME,
PART_BILL1.PART_CAT_CODE,
PART_BILL1.EMPL_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME,
PART_BILL1.PERCENTAGE,
Part_BILL1.EFF_DATE
HAVING
(Part_BILL1.EFF_DATE = CASE
WHEN MAX(Part_BILL1.EFF_DATE) > Part_BILL1.EFF_DATE THEN max(Part_BILL1.EFF_DATE) ELSE Part_BILL1.EFF_DATE END)`
它运行,但它给了我两行而不是一排,即它不只是拉最大。我正在使用 T-SQL 并使用 Visual Studio 编写 SSRS。
我很乐意回答我能回答的任何问题。如果我的解释不是很好,我提前道歉。
| CLIENT_CODE | CLIENT_NAME | BILLING_NAME | EFF_DATE | PERCENTAGE |
| ------------+--------------+--------------+----------+------------|
| 123456 | Entity, Inc. | Attorney A | 1/1/1990 |50% |
| 123456 | Entity, Inc. | Attorney B | 1/1/1990 |50% |
| 123456 | Entity, Inc. | Attorney B | 1/1/2017 |50% |
| 123456 | Entity, Inc. | Attorney C | 1/1/2017 |50% |
【问题讨论】:
-
在您提供的参考资料中,您对给出的数据有一个特定的问题。您提供了大量表格,却不知道其中有什么。有什么方法可以在测试数据中提供更简化的版本?如果没有看到基础数据,很难提供这么多具体的细节。
-
@djangojazz 这很合理!我已经删除了额外的东西,所以它几乎是一样的。现在显示的唯一表格是使用我选择的字段运行查询所需的表格。
标签: sql-server tsql reporting-services