Member 13410460 Ответов: 1

Как использовать COUNT DISTINCT в SQL - коде ?


Всем Привет,

У меня есть этот код, который я подсчитываю поле в своем SQL, и у меня есть определенный столбец, который мне нужно подсчитать, чтобы отличить значения, но я не знаю, как использовать его в этом формате,

Это и есть код :

SELECT
        Sum(Price) As Total,
        CONVERT(char(7), date, 120) As [year],
		Department ,
		 Sum Dinstict (CONVERT(INT, CONVERT(VARCHAR(MAX),quantity))) as Lesh
    FROM
        dbo.Expenses
    WHERE
  CONVERT(char(7), date, 120) Between '2020-01' And '" 2020-07"' AND
        Department = 'FixCost' 
    GROUP BY
       CONVERT(char(7), date, 120),
	   Department 
	   )
SELECT
    Total,
     [year],
	 Department as 'Department',
	  Concat(SUM(Convert(int,Convert(Varchar(MAX),(Lesh)))) OVER (),'') As GrandTotal
FROM
    cte
WHERE
     [year] Is Not Null


Что я уже пробовал:

Мне нужно использовать его здесь :

Total,
     [year],
	 Department as 'Department',
	  Concat(SUM(Convert(int,Convert(Varchar(MAX),(Lesh)))) OVER (),'') As GrandTotal


Я попробовал это сделать, но ничего не вышло :

Concat(COUNT(Convert(int,Convert(Varchar(MAX),(Distinct,Lesh)))) OVER (),'')


Спасибо,
Благословения

1 Ответов

Рейтинг:
2

Maciej Los

Это не ответ, а инструкция, как заставить ваш запрос работать.

1. Вместо этого:

CONVERT(char(7), date, 120) As [year]

использовать:
YEAR([date]) As [year]

Вам не нужно конвертировать дату в строку, чтобы получить год. Есть встроенная функция, Год (Transact-SQL) - SQL Server | Microsoft Docs[^]
КСТАТИ: date это тип данных ms sql server, поэтому я бы предложил поместить имя поля между [] скобки.

2. Вместо этого:
SUM(CONVERT(INT, CONVERT(VARCHAR(MAX),quantity)))

использовать:
SUM(quantity)

Двойное преобразование из integer в тип varchar и обратно к!

3. Вместо этого:
WHERE CONVERT(char(7), date, 120) Between '2020-01' And '" 2020-07"'

использовать:
WHERE [date] Between '2020-01-01' And '2020-07-31'

Если поле [Дата] используется для группировки данных, вам необходимо "преобразовать его" в единую дату с помощью DATEFROMPARTS[^] или Функция dateadd[^] функция.
DATEFROMPARTS(YEAR([date]), MONTH([date]), 1) --returns 1. day of month
--or
DATEADD(DD, - DAY([date]) +1, [date]) --returns 1. day of month


[РЕДАКТИРОВАТЬ]

Если вы хотите получить различные значения в виде списка, разделенного запятыми, проверьте это: Преобразование значений строк в таблице в одну объединенную строку - SQLMatters[^]

Удачи вам!