小编Jon*_*Way的帖子

在动态数据透视表中对月份名称进行排序

我使用以下查询生成了一个动态数据透视表,它可以工作,但列 (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)

t-sql sql-server sql-server-2014

4
推荐指数
2
解决办法
1197
查看次数

计算字符串中的空格数

我正在进行数据验证,我正在尝试计算字符串中的空格数.我的问题是,当我计算空格时,文本之间有多个空格的任何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)

基于第一个查询的当前输出 …

sql t-sql sql-server

3
推荐指数
1
解决办法
1556
查看次数

当月剩余的天数

给定月份剩余天数如何查找当月剩余天数?例如,当前月份是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)

sql sql-server sql-server-2008

2
推荐指数
1
解决办法
3092
查看次数

SQL Server用户定义函数来计算年龄段

我创建了一个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)

t-sql sql-server

2
推荐指数
1
解决办法
592
查看次数

动态地将列分组到范围中

我的列中的数据从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)

t-sql sql-server sql-server-2008

0
推荐指数
1
解决办法
57
查看次数

SQL Server 用户定义函数给出错误

我在 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)

知道为什么吗?

sql sql-server sql-server-2012

0
推荐指数
1
解决办法
39
查看次数