SQL Server Присоединение к оператору выбора с использованием count () и группировка по - PullRequest
1 голос
/ 19 августа 2011

У меня есть две таблицы в SQL Server, tbl_disputes и tbl_disputetypes.Таблица tbl_disputes содержит столбец внешнего ключа disputetype.Таблица tbl_disputetypes содержит поля первичного ключа disputetypeid и disputetypedesc.Следующий запрос дает мне счетчик каждого disputetype из таблицы tbl_disputes.

select disputetype, count(disputetype) as numberof
from tbl_disputes
group by disputetype

Какой тип соединения или подзапроса мне нужно использовать для отображения tbl_disputetypes.dbo.disputetypedesc вместо tbl_disputes.dbo.disputetype?

EDIT Проблема возникла из-за установленного disputetypedescкак текст.Я изменил его на nvarchar, и сработал следующий запрос:

SELECT
    tbl_disputetypes.disputetypedesc,
    count(tbl_disputetypes.disputetypedesc)
FROM
    tbl_disputes Left OUTER JOIN
    tbl_disputetypes ON tbl_disputes.disputetype = tbl_disputetypes.disputetypeid
group by tbl_disputetypes.disputetypedesc

Ответы [ 5 ]

3 голосов
/ 19 августа 2011

Если я что-то упустил, вы можете просто LEFT JOIN описание:

select disputetypedesc, count(disputetype) as numberof
from tbl_disputes d
LEFT JOIN tbl_disputetypes dt
    ON dt.disputetypeid = d.disputetype
group by disputetypedesc
2 голосов
/ 19 августа 2011

Предполагая 2005 +:

WITH x(t, numberof) AS 
(
  SELECT disputetype, COUNT(*) 
    FROM tbl_disputes 
    GROUP BY disputetype
)
SELECT dt.disputetypedesc, x.numberof
  FROM tbl_disputetypes AS dt
  INNER JOIN x ON dt.disputetype = x.t;
2 голосов
/ 19 августа 2011

Простое ПРИСОЕДИНЕНИЕ?

select
    DT.disputetypedesc, count(*) as numberof
from 
    tbl_disputes D
    JOIN
    tbl_disputetypes DT ON D.disputetype = DT.disputetype
group by
    DT.disputetypedesc
1 голос
/ 19 августа 2011

Основная идея заключается в том, что вам потребуется подзапрос. Примерно так будет работать:

select disputetypedesc, disputetype, numberof
from (select disputetype, count(disputetype) numberof
      from tbl_disputes
      group by disputetype) t left outer join
     tbl_disputetypes on t.disputetype = tbl_disputetypes.disputetype
0 голосов
/ 19 августа 2011

Я не уверен, что понимаю ваш вопрос, однако вы сможете выбрать все столбцы, используя запрос, подобный примеру кода ниже.

Следующий запрос объединит две таблицы по столбцу disputetypeid.Я изменил формат оператора SQL, но вы, очевидно, можете отформатировать его так, как вам хотелось бы.

    SELECT tbl_disputetypes.disputetypedesc
         , tbl_disputes.*
         , <any_column_from_either_table>
      FROM tbl_disputes
INNER JOIN tbl_disputetypes
        ON tbl_disputes.disputetypeid = tbl_disputetypes.disputetypeid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...