Так что я не совсем уверен, как это сформулировать, и я довольно новичок в использовании 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
отличается между этими записями.
Не спрашивайте меня, почему таблица была построена таким образом, но в основном мне нужно TaxableLandValues
из LineNum
1-6 для одного поля в отчете SSRS и TaxableLandValues
из LineNum
101-106для другого поля без изменения таблицы.
В настоящее время SELECT TaxableLandValue
в моей хранимой процедуре успешно получает значения для 1-6, в то время как я отфильтровываю другие результаты на основе другого столбца ZoningID
, которыйNULL
в 101-106 записях, в противном случае все 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 |
+--------+-----------+-------------+------------------+-----------------+
Заранее спасибо за любую помощь и дайте мне знать, если вам нужна дополнительная информация.Извините, если это дубликат, но я не смог найти какие-либо связанные вопросы.