【发布时间】:2021-09-16 07:40:08
【问题描述】:
我正在运行 SELECT 查询以跨同一服务器实例中的多个表获取数据。但是,我刚刚注意到在某些数据上提取的行会重复,因为我从中提取的主表在其中一列中有几个不同的值。这是查询:
SELECT DISTINCT BIF030.C_ACCOUNT AS ACCOUNTNUMBER,
BIF003.C_ACCOUNTTYPE AS ACCOUNTTYPECODE,
CON013.C_DESCRIPTION AS ACCOUNTTYPE,
BIF003.C_DIVISION AS ZONE_DIVISONCODE,
CON028.C_DESCRIPTION AS ZONE_DIVISION,
BIF030.C_METER as METERNUMBER,
BIF005.C_METERCUSTOM1 AS REGISTERNUMBER,
CONVERT(DECIMAL(20,2), BIF030.N_CONSUMP) AS CONSUMPTION,
CON007.C_DESCRIPTION AS UNITS,
BIF030.T_READDATE AS READINGDATE,
MONTH(BIF030.T_READDATE) AS READINGMONTH,
DAY(BIF030.T_READDATE) AS READINGDAY,
YEAR(BIF030.T_READDATE) AS READINGYEAR,
BIF030.I_DAYS AS READINGDAYSCOUNT
FROM ADVANCED.BIF030
LEFT JOIN ADVANCED.CON007 ON CON007.C_UNITS=BIF030.C_UNITS
LEFT JOIN ADVANCED.BIF005 ON BIF005.C_METER=BIF030.C_METER
LEFT JOIN ADVANCED.BIF003 ON BIF003.C_ACCOUNT=BIF030.C_ACCOUNT
LEFT JOIN ADVANCED.CON013 ON CON013.C_ACCOUNTTYPE=BIF003.C_ACCOUNTTYPE
LEFT JOIN ADVANCED.CON028 ON CON028.C_DIVISION=BIF003.C_DIVISION
WHERE T_READDATE > '01-01-2014'
ORDER BY ACCOUNTNUMBER, READINGDATE ASC
我知道 SELECT DISTINCT 不受欢迎,但没有它我会得到更多行。以下是拉取数据时的示例:
| ACCOUNTNUMBER | ACCOUNTTYPECODE | ACCOUNTTYPE | ZONE_DIVISIONCODE | ZONE_DIVISION | METERNUMBER | REGISTERNUMBER | CONSUMPTION | UNITS | READINGDATE | READINGMONTH | READINGDAY | READINGYEAR | READINGDAYSCOUNT |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1234567 | SP | ACCOUNT TYPE 1 | 00 | 00-NO ZONE | 123456789 | 987654321 | 3.00 | Thousands of Gallons | 2014-01-16 00:00:00.00 | 1 | 16 | 2014 | 30 |
| 1234567 | MF | ACCOUNT TYPE 2 | 02 | 02-GRAVITY | 123456789 | 987654321 | 3.00 | Thousands of Gallons | 2014-01-16 00:00:00.00 | 1 | 16 | 2014 | 30 |
| 1234567 | SR | ACCOUNT TYPE 3 | 02 | 02-GRAVITY | 123456789 | 987654321 | 3.00 | Thousands of Gallons | 2014-01-16 00:00:00.00 | 1 | 16 | 2014 | 30 |
我也知道搞砸的列是“AccountTypeCode”,因为没有与“AccountNumber”关联的多个代码的其他帐户只显示一组行。因此,当它应该只为每个“ReadingDate”拉一个时,这个(可能还有其他)特别是拉的行数增加了三倍。
如果有人知道优化查询的好方法,我很乐意学习。我知道足够多的 SQL 是危险的,但还不足以解决这个问题。谢谢。
【问题讨论】:
-
当您想将多条记录压缩为一条时,您必须知道要使用的规则。您有 3 个不同的 AccountTypeCode - 您想要哪一个?
-
所以我想我应该补充一点,在理想的结果中,“AccountTypeCode”将与关联的“ReadingDate”相关联。不深入很难解释,但基本上“AccountNumber”将始终相同,但“AccountTypeCode”可以更改。但是,“ReadingDate”将始终只与特定的“AccountTypeCode”相关联。
-
在您的问题中包含示例数据和所需结果,以帮助说明您的问题并使其更容易和可能提供帮助。
-
我附上了一张结果的照片(缩小到 3 行,实际上拉了 200 行),但我必须链接它(它不是嵌入的),因为我的帐户是新帐户。至于预期的结果,我应该只显示图中 3 行中的 1 行,而不是全部 3 行。编辑:在这种情况下,“Single Family Res Inside”行是它应该显示的唯一行,但它显示了 3 行链接的图片。
-
编辑帖子以使用 Markdown 表作为结果。在此表中,类型 1 是唯一应该显示的类型
标签: sql sql-server tsql