Ниже приведены данные, которые содержит моя таблица. Я также поделился запросами, как мне нужен результат. Основываясь на столбце IPAddress, я должен подсчитывать данные и показывать их по месяцам, например, с IP-адресом и внешней стороной IP-адреса в течение определенного месяца.Показатели записи месяц мудрый на основе другого столбца
Это данные DDL и образец:
CREATE TABLE [#IPAddress](
[DEPTNO] [numeric](2, 0) NULL,
[HIREDATE] [datetime] NULL,
[IPAddress] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[#IPAddress] ([DEPTNO], [HIREDATE], [IPAddress])
VALUES (CAST(20 AS Numeric(2, 0)), CAST(0x0000738200000000 AS DateTime), 14)
, (CAST(30 AS Numeric(2, 0)), CAST(0x000073C300000000 AS DateTime), 6)
, (CAST(30 AS Numeric(2, 0)), CAST(0x000073C500000000 AS DateTime), 18)
, (CAST(20 AS Numeric(2, 0)), CAST(0x000073EC00000000 AS DateTime), 1)
, (CAST(30 AS Numeric(2, 0)), CAST(0x0000749F00000000 AS DateTime), 13)
, (CAST(30 AS Numeric(2, 0)), CAST(0x0000740900000000 AS DateTime), 9)
, (CAST(10 AS Numeric(2, 0)), CAST(0x0000743000000000 AS DateTime), 1)
, (CAST(20 AS Numeric(2, 0)), CAST(0x0000765400000000 AS DateTime), 13)
, (CAST(10 AS Numeric(2, 0)), CAST(0x000074D100000000 AS DateTime), 15)
, (CAST(30 AS Numeric(2, 0)), CAST(0x0000748B00000000 AS DateTime), 19)
, (CAST(20 AS Numeric(2, 0)), CAST(0x0000767600000000 AS DateTime), 12)
, (CAST(30 AS Numeric(2, 0)), CAST(0x000074E100000000 AS DateTime), 1)
, (CAST(20 AS Numeric(2, 0)), CAST(0x000074E100000000 AS DateTime), 1)
, (CAST(10 AS Numeric(2, 0)), CAST(0x0000751400000000 AS DateTime), 2)
Мое требование:
SELECT *
FROM (
select DEPTNO, datename(month,HIREDATE) [month],COUNT(IPAddress) Amount from [#IPAddress] where IPAddress between 1 and 10 group by DEPTNO,datename(month,HIREDATE)
) as s
PIVOT
(
SUM(Amount) FOR [month] IN (December,February,January,November,September)
)AS pvt
SELECT *
FROM (
select DEPTNO, datename(month,HIREDATE) [month],COUNT(IPAddress) Amount from [#IPAddress] where IPAddress between 11 and 20 group by DEPTNO,datename(month,HIREDATE)
) as s
PIVOT
(
SUM(Amount) FOR [month] IN (December,February,January,November,September)
)AS pvt
После выполнения вышеуказанных запросов я получаю 2 наборов результатов.
Но я хотел бы, чтобы данные, аналогичные -
select 10 DeptNo,null DecemberInIPAddress,null DecemberOutIPAddress,null FebruaryInIPAddress,null FebruaryOutIPAddress,1 JanuaryInIPAddress,null JanuaryOutIPAddress,
null NovemberInIPAddress,1 NovemberOutIPAddress, null SeptemberInIPAddress,null SeptemberOutIPAddress
union
select 20 DeptNo,1 DecemberInIPAddress,2 DecemberOutIPAddress,null FebruaryInIPAddress,null FebruaryOutIPAddress,null JanuaryInIPAddress,1 JanuaryOutIPAddress,
null NovemberInIPAddress,null NovemberOutIPAddress, null SeptemberInIPAddress,null SeptemberOutIPAddress
union
select 30 DeptNo,1 DecemberInIPAddress,null DecemberOutIPAddress,1 FebruaryInIPAddress,1 FebruaryOutIPAddress,null JanuaryInIPAddress,null JanuaryOutIPAddress,
null NovemberInIPAddress,null NovemberOutIPAddress, null SeptemberInIPAddress,2 SeptemberOutIPAddress
Окончательный запрос дает один набор результатов, я хочу привести, как это.
Так почему вы не можете получить то, что вы хотите? Вы получаете сообщение об ошибке? Пожалуйста, разместите свою попытку, и что с ней не так. –
Как вы определяете, что такое 'IN' и' OUT' IP-адрес? – FutbolFan
@Tab Alleman, На самом деле имена месяцев динамичны. Но я здесь жестко закодирован. –