Member 11307750 Ответов: 2

Как я могу...mutiply два(2) столбца таблицы


Пожалуйста, мне нужно mutiply Total no of Jobtype и значение MEAL_Ticket для конкретной даты



Чего я хочу, так это

             Fulltime   FulltimeTicket_Value           Contract       Casual
2018/06/04         1              500(1*500)                  6            2
2018/06/05         3             1500(3*500)                  0            0
2018/06/06         0              0  (0*500)                  3            1
2018/06/07         2             1000(2*500)                  1            0
2018/06/08         1              500(1*500)                  1            3
2018/06/09         0                0(0*500)                  1            4



Пожалуйста помочь

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

SELECT DISTINCT Datename(dw, Time)+', '+CONVERT(VARCHAR(12), Time, 107) as Date_to_Display,Vale,
           (SELECT COUNT(*) FROM CanLog as c WHERE c.Time= clog.Time AND jobtype = 'fulltime') AS Fulltime,
    	   (Select Count(Jobtype)*Sum(Value) from	CanLog WHERE Time BETWEEN '2018-02-12' AND '2018-02-14' AND jobtype = 'fulltime' )AS FulltimeTicket_Value,
           (SELECT COUNT(*) FROM CanLog as c WHERE c.Time = clog.Time AND jobtype = 'contract') AS Contract,
           (SELECT COUNT(*) FROM CanLog as c WHERE c.Time = clog.Time AND jobtype = 'casual') AS Casual
    FROM CanLog AS clog
    WHERE Time BETWEEN '2018-02-12' AND '2018-02-14' 
    GROUP BY Time ,Jobtype 
    ORDER BY 2 ASC


я получил эту ошибку

Столбец "CanLog.Value" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

2 Ответов

Рейтинг:
1

Mike V Baker

Это не совсем то, что вы описываете, но этого может быть достаточно, чтобы понять, куда идти дальше.
Ваша функция преобразования использует 107, но это не тот формат, который вы имеете в своем текстовом отображении того, что вы хотите. Похоже, вам нужна только работа "на полную ставку". Я включил все типы заданий в список, чтобы лучше видеть группировку. Образец вставляет записи со значениями даты и времени, все из которых не имеют разницы во времени (все только дата). Если фактические записи имеют различия во времени, например, фактическое время, когда они вошли в систему, то это должен быть подзапрос, чтобы собрать все различные времена под одной датой, по которой вы можете затем сгруппироваться.
В нижней части есть два выбора, один из которых позволяет вам видеть необработанные записи, которые будут использоваться в следующем выборе "group by".

CREATE TABLE CanLog ([Time] DateTime NOT NULL, [jobtype] nvarchar(25) not null, [value] int not null)

-- create 3000 records with random values 
-- (some fail when trying to insert NULL in jobtype, but continues until 3000 are inserted)
WHILE (SELECT COUNT(*) FROM CanLog) < 3000
BEGIN
	INSERT INTO CanLog ([Time], [jobtype], value) VALUES
	(
		DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 365), '2018-01-01'), 
		CHOOSE((ABS(CHECKSUM(NewId())) % 3) + 1, 'fulltime', 'parttime', 'contract'),
		ABS(CHECKSUM(NewId())) % 300 + 300
	)
END

-- SELECT some records
SELECT jobtype, [Time], [Value] FROM CanLog WHERE [Time] BETWEEN '2018-02-12' AND '2018-02-14' ORDER BY jobtype, [Time]
SELECT CONVERT(VARCHAR(12), [Time], 111) AS DateToDisplay, jobtype, COUNT(*) AS JobTypeCount, SUM(value) AS Ticke_Value FROM CanLog WHERE [Time] BETWEEN '2018-02-12' AND '2018-02-14' GROUP BY [Time], jobtype

Мне действительно было бы интересно, работает ли это решение для вас.
О, я чуть не забыл... в какой-то момент у вас есть
Select Count(Jobtype)*Sum(Value)
Ты же не хочешь этого делать. Сумма-это уже общая сумма значений для этих элементов. Если вы умножите их, то сумма будет неправильной.
ХТХ,
Майк