【发布时间】:2019-05-15 23:12:46
【问题描述】:
所以我不太确定如何措辞,而且我对在专业环境中使用 SQL 还很陌生,但我希望我能清楚地理解。首先,我的数据如下所示:
+--------+-----------+-------------+------------------+
| LandID | LandUnits | LandLineNum | TaxableLandValue |
+--------+-----------+-------------+------------------+
| 36512 | 19 | 6 | 8129 |
| 36513 | 25 | 4 | 20638 |
| 36514 | 5 | 3 | 18484 |
| 36515 | 95 | 5 | 78530 |
| 36516 | 73 | 2 | 260560 |
| 36517 | 1 | 1 | 20528 |
| 36518 | 25 | 104 | 6500 |
| 36519 | 73 | 102 | 57541 |
| 36520 | 1 | 101 | 20528 |
| 36521 | 19 | 106 | 1281 |
| 36522 | 95 | 105 | 19977 |
| 36523 | 5 | 103 | 3068 |
+--------+-----------+-------------+------------------+
这些LandID 部分都由另一个表中的单个PropertyID 关联——通过桥表(PropertyToLand) 引用。所以基本上,这 12 条记录与同一业主有关,构成一个人拥有的 6 块土地。如果您仔细查看此数据,您会发现 LineNum 1-6 与它们各自的 LandUnit 对齐并依赖于 LineNum 101-106,但这些记录之间的 TaxableLandValue 是不同的。
不要问我为什么要以这种方式构建表,但基本上,SSRS 报告中的一个字段需要TaxableLandValues 来自LineNum 1-6,而TaxableLandValues 来自LineNum 101-106为另一个字段而不修改表。
目前,我的存储过程中的SELECT TaxableLandValue 成功获取了 1-6 的值,而我一直在根据 101-106 记录中的另一列 ZoningID(即 NULL)过滤掉其他结果,否则将所有 12 条记录添加到报告中。
基本上,我需要找出将LineNum 1 与LineNum 101 等连接起来的最佳方式,以隔离不同的TaxableLandValue 结果。
我当前的 SQL 过程创建了一个包含 15 列的表,我将尝试压缩我的代码以显示问题。
ALTER PROCEDURE rpt_LandData
@PropertyID INT
CREATE TABLE #temp (
LandID VARCHAR(50),
LandUnits INT,
LandLineNum INT,
TaxableLandValue VARCHAR(50),
TaxableUseValue VARCHAR(50))
INSERT INTO #temp(
l.LandID AS LandId,
l.LandUnits AS LandUnits,
l.LandLineNum AS LandLineNum,
l.TaxableLandValue AS TaxableLandValue,
l.TaxableLandValue AS TaxableUseValue)
FROM t_Land l
INNER JOIN t_PropertyToLand ptl ON l.LandID=ptl.LandID
INNER JOIN t_Property p ON ptl.PropertyID=p.PropertyID
WHERE ptl.PropertyID = @PropertyID AND l.ZoningID IS NOT NULL
SELECT * FROM #temp
ORDER BY CASE WHEN LandLineNum IS NULL THEN 1 ELSE 0 END, LandLineNum ASC
我尝试了各种方法,包括删除ZoningID 上的过滤器,而是使用(SELECT TaxableLandValue FROM t_Land WHERE ZoningID IS NULL) AS TaxableUseValue,但这是我难以理解的方法。
我的预期结果是这样的:
+--------+-----------+-------------+------------------+-----------------+
| LandID | LandUnits | LandLineNum | TaxableLandValue | TaxableUseValue |
+--------+-----------+-------------+------------------+-----------------+
| 36517 | 1 | 1 | 20528 | 20528 |
| 36516 | 73 | 2 | 260560 | 57541 |
| 36514 | 5 | 3 | 18484 | 3068 |
| 36513 | 25 | 4 | 20638 | 6500 |
| 36515 | 95 | 5 | 78530 | 19977 |
| 36512 | 19 | 6 | 8129 | 1281 |
+--------+-----------+-------------+------------------+-----------------+
提前感谢您的帮助,如果您需要更多信息,请告诉我。 抱歉,如果这是重复的,但我无法找到任何相关问题。
【问题讨论】:
-
加入
LandLineNum = LandLineNum+100?有什么原因不那么简单吗? -
@TabAlleman 您介意提供一个示例,说明在我的程序上下文中会是什么样子吗?你是在建议一个额外的
JOIN声明将 Land 加入到自身中?
标签: sql sql-server reporting-services sql-server-2012