我使用以下查询生成了一个动态数据透视表,它可以工作,但列 (monthyear) 是按字母顺序排列的,但我希望它们按时间顺序排列 Monthyear 列是使用 SQL Server 2014 中的函数派生的
CREATE TABLE ##MyTable (Num VARCHAR(10), StartDate DATE, [Types] VARCHAR(10))
INSERT INTO ##MyTable VALUES
('AA1','2016-01-01', 'Type1'),('AA2','2017-01-04', 'Type1'),('AA3','2016-01-04', 'Type1'),('AA4','2017-01-01', 'Type2'),
('AA5','2017-01-10', 'Type3'),('AA6','2016-01-02', 'Type1'),('AA7','2017-01-05', 'Type1'),('AA8','2016-01-12', 'Type1'),
('AA9','2016-01-06', 'Type1'),('AA10','2016-01-10', 'Type3'),('AA11','2017-01-11', 'Type1'),('AA12','2016-01-09', 'Type2'),
('AA13','2016-08-06', 'Type3'),('AA14','2017-01-02', 'Type1'),('AA15','2016-01-05', 'Type1'),('AA16','2017-01-07', 'Type1'),
('AA17','2016-01-04', 'Type1'),('AA18','2017-01-03', 'Type3'),('AA19','2017-01-01', 'Type1'),('AA20','2016-01-10', 'Type2'),
('AA21','2018-01-02', 'Type3'),('AA22','2017-01-10', 'Type1'),('AA23','2017-01-11', 'Type1'),('AA24','2017-01-12', 'Type1'),
('AA25','2017-01-09', 'Type1'),('AA26','2017-01-03', 'Type3'),('AA27','2016-01-07', 'Type1'),('AA28','2017-01-03', 'Type3'),
('AA29','2016-01-09', 'Type3'),('AA30','2017-10-12', 'Type1'),('AA31','2016-01-08', 'Type1'),('AA32','2017-01-10', 'Type1'),
('AA33','2016-01-04', 'Type1'),('AA34','2016-01-03', 'Type1'),('AA35','2018-01-01', 'Type3'),('AA36','2016-01-12', 'Type3'),
('AA37','2017-01-12', 'Type1'),('AA38','2016-01-05', 'Type1'),('AA39','2017-01-01', 'Type1'),('AA40','2017-01-12', 'Type3'),
('AA41','2017-01-07', 'Type1'),('AA42','2017-01-04', 'Type3'),('AA43','2018-01-03', 'Type1'),('AA44','2016-01-08', 'Type1'),
('AA45','2016-09-10', 'Type1'),('AA46','2016-01-11', 'Type3'),('AA47','2017-01-10', …Run Code Online (Sandbox Code Playgroud) 我正在进行数据验证,我正在尝试计算字符串中的空格数.我的问题是,当我计算空格时,文本之间有多个空格的任何sting或任何带有尾随空格的字符串都不计算在内我没有运气就尝试了以下代码.每个代码给出不同的结果,但不是所需的输出
DECLARE @MyTbl TABLE (ID INT, Name VARCHAR(300))
INSERT INTO @MyTBL VALUES
(1, 'Alfreds Futterkiste'), -- 1 space
(2,'Mike James Ray '), -- 4 spaces 1 space between each text and 2 spaces after text
(3,'Hanari Carnes'), -- 2 spaces between text
(4,'James Michael')
-- 1
SELECT ID,
LEN(Name)-LEN(REPLACE(Name, ' ', '')) AS Count_Of_Spaces
FROM @MyTBL
-- 2
SELECT ID,
LEN(Name + ';')-LEN(REPLACE(Name,' ','')) AS Count_Of_Spaces2
FROM @MyTBL
-- 3
SELECT ID,
LEN(Name)-LEN(REPLACE(Name,' ', '')) AS Count_Of_Spaces3
FROM @MyTBL
Run Code Online (Sandbox Code Playgroud)
基于第一个查询的当前输出 …
给定月份剩余天数如何查找当月剩余天数?例如,当前月份是11月,今天的日期是16/11/2016月份的天数 - Elapse天数=?我想动态地做它在我的例子中30 - 16 = 14
declare @date date
set @date='16 Nov 2016'
select datediff(day, @date, dateadd(month, 1, @date)) - 16 AS DaysLeft
Run Code Online (Sandbox Code Playgroud) 我创建了一个UDF来计算数据库中的年龄段.我使用以下代码
CREATE FUNCTION Agebracket(@Ages INT)
RETURNS VARCHAR
AS
BEGIN
DECLARE @Age_Group varchar
SET @Age_Group = CASE WHEN @Ages BETWEEN 0 AND 9 THEN '[0-9]'
WHEN @Ages BETWEEN 10 AND 19 THEN '[10-19]'
WHEN @Ages BETWEEN 20 AND 29 THEN '[20-29]'
WHEN @Ages BETWEEN 30 AND 39 THEN '[30-39]'
WHEN @Ages BETWEEN 40 AND 49 THEN '[40-49]'
WHEN @Ages BETWEEN 50 AND 59 THEN '[50-59]'
WHEN @Ages BETWEEN 60 AND 69 THEN '[60-69]'
WHEN @Ages BETWEEN 70 AND 79 THEN '[70-79]' …Run Code Online (Sandbox Code Playgroud) 我的列中的数据从1到6,000开始.数据始终从1开始上限变化但不小于6,000.有时1到6,000,其他时间1到7,200等.我想使用50组例如0-50,51-100,101-150等将数据分组到另一列中
CREATE TABLE ##TBL (Col INT)
INSERT INTO ##TBL VALUES
(83),(4),(228),(238),(158),(289),(18),(238),(157),(152),(139),(118),(171),(211),(25),(47),(197),(222),
(280),(164),(20),(166),(23),(107),(34),(24),(81),(178),(179),(119),(295),(117),(264),(80),(300),(51),
(128),(124),(296),(213),(150),(85),(92),(285),(281),(47),(115),(36),(267),(274),(75),(176),(57),(71),
(2),(193),(138),(97),(28),(53),(174),(33),(151),(178),(74),(21),(89),(182),(57),(224),(175),(91),
(209),(296),(299),(84),(74),(129),(214),(83),(151),(269),(63),(34),(139),(288),(275),(176),(40),(52),
(199),(95),(167),(38),(46),(179),(190),(292),(174),(127),(191),(241),(177),(83),(289),(98),(50),(289),
(185),(193),(65),(19),(126),(115),(201),(222),(121),(257),(90),(158),(273),(65),(97),(24),(152),(76),
(231),(157),(225),(297),(291),(196),(153),(53),(261),(173),(37),(53),(123),(201),(234),(141),(149),(126),
(26),(22),(121),(252),(126),(4),(210),(196),(176),(102),(202),(114),(228),(3),(23),(25),(22),(129),
(70),(86),(113),(175),(191),(242),(71),(143),(240),(269),(133),(31),(228),(185),(127),(234),(253),(80),
(294),(2),(122),(225),(107),(219),(12),(152),(172),(138),(217),(5),(93),(129),(37),(177),(12),(277),
(195),(93),(93),(93),(238),(134),(60),(3),(245),(48),(40),(205),(288),(82),(190),(174),(143),(1),
(37),(131),(55),(187),(199),(57),(207),(289),(57),(98),(157),(264),(188),(248),(149),(110),(96),(93),
(91),(22),(198),(120),(22),(244),(115),(170),(211),(117),(189),(78),(80),(19),(269),(114),(171),(268),
(258),(59),(27),(190),(208),(5),(52),(88),(262),(106),(235),(77),(108),(35),(174),(245),(107),(21),
(224),(31),(118),(160),(176),(185),(34),(8),(16),(70),(142),(258),(46),(287),(73),(129),(20),(255),
(165),(183),(14),(214),(204),(159),(298),(152),(31),(15),(148),(253),(280),(226),(70),(147),(138),(299),
(229),(189),(98),(54),(262),(94),(115),(195),(261),(126),(67),(100),(186),(243),(236),(250),(148),(172),
(244),(286),(76),(132),(202),(46),(122),(229),(162),(189),(16),(82),(133),(172),(40),(73),(145),(228),
(22),(145),(114),(288),(279),(193),(293),(151),(2),(12),(2),(261),(58),(286),(146),(139),(5),(194),
(104),(248),(70),(211),(186),(276),(88),(188),(35),(75),(236),(188),(63),(246),(7),(7),(229),(275),
(193),(61),(30),(116),(246),(242),(236),(145),(172),(14),(166),(164),(287),(111),(7),(92),(193),(288),
(244),(53),(98),(197),(189),(13),(131),(234),(184),(181),(190),(295),(163),(170),(135),(267),(174),(3),
(134),(224),(71),(252),(170),(36),(198),(63),(280),(152),(225),(10),(273),(263),(89),(273),(69),(5),
(42),(120),(40),(73),(3),(127),(241),(78),(198),(276),(188),(104),(224),(110),(260),(162),(100),(25),
(53),(241),(44),(163),(8),(126),(160),(49),(283),(299),(157),(93),(136),(290),(194),(121),(73),(102)
Run Code Online (Sandbox Code Playgroud)
我有以下查询.
-- group of 50
SELECT
Col,
CASE WHEN Col<=50 THEN '01-50'
WHEN Col BETWEEN 51 AND 100 THEN '51-100'
WHEN Col BETWEEN 101 AND 150 THEN '101-150'
WHEN Col BETWEEN 151 AND 200 THEN '151-200' --- and so on
END AS Group_Col
FROM …Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 中创建以下 UDF
CREATE Function [Fn_dd]
(@InputstartDate Date, @InputendDate Date)
returns @AllDates Table
(AllDate Date)
As
Begin
Declare @startDate date
Declare @endDate date
Declare @rDate date
set @startDate = @InputstartDate
set @EndDate = @InputendDate
while (@startDate <= @endDate)
Begin
insert into @AllDates values (@startDate )
set @startDate = DATEADD(dd,1,@startDate)
End
return
End
GO
Run Code Online (Sandbox Code Playgroud)
但是当我在数据中使用它时会出现错误
select
dbo.Fn_dd('2020-01-02','2020-02-08')
from dbo.Txns
Run Code Online (Sandbox Code Playgroud)
错误信息
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.Fn_dd", or the name is ambiguous.
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?