SSRS объединяет записи с разными значениями в одном столбце - PullRequest
0 голосов
/ 14 декабря 2018

Так что я не совсем уверен, как это сформулировать, и я довольно новичок в использовании 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            |
+--------+-----------+-------------+------------------+-----------------+

Заранее спасибо за любую помощь и дайте мне знать, если вам нужна дополнительная информация.Извините, если это дубликат, но я не смог найти какие-либо связанные вопросы.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я очень ценю помощь @TabAlleman, и я смог решить мою проблему благодаря его вкладу, хотя данный ответ был не совсем решением, которое я искал.Мне удалось найти правильный ответ, присоединив t_Land к себе на LandLineNum - 100, но я также должен был проверить, что вызываемый параметр соответствует обеим t_Property таблицам, которые были объединены.

SELECT  l.LandID AS LandID,
    l.LandLineNum AS LineNum, 
    l.LandValueTaxable AS TaxValues,
    la.LandLineNumber AS LineNum2,
    la.LandValueTaxable AS UseValues
     FROM t_Land l 
LEFT JOIN t_Land la ON l.LandLineNum = la.LandLineNum - 100
LEFT JOIN t_PropertyToLand prl ON l.LandID = prl.LandID
LEFT JOIN t_Property pr ON prl.PropertyID = pr.PropertyID
LEFT JOIN t_PropertyToLand prl2 ON la.LandID = prl2.LandID
LEFT JOIN t_Property pr2 ON prl2.Property_ID = pr2.Property_ID

WHERE pr.PropertyID = @PropertyID AND pr2.PropertyID = @PropertyID
0 голосов
/ 14 декабря 2018

В качестве примера предложения в моем комментарии вы можете сделать что-то подобное в предложении FROM:

(отредактировано на основе комментария)

...
FROM  t_Land l 
INNER JOIN t_Land u ON l.LandID=u.LandID AND l.LandLineNum = u.LandLineNum - 100
{This may require TWO joins to t_PropertyToLand, I can't say since you haven't shared your full table structure}
...

А затем l.TaxableLandValueбудет иметь вашу стоимость земли, а u.TaxableLandValue будет иметь вашу полезную стоимость.

Вы должны будете включить некоторый фильтр, чтобы исключить подсчет linenum s свыше 100 в результатах l.

...