小编Kai*_*shu的帖子

如何获得同一表上不同列的计数

表#01 Status

StatusID    Status
-----------------------
 1          Opened
 2          Closed
 3          ReOpened
 4          Pending
Run Code Online (Sandbox Code Playgroud)

表#02 Claims

ClaimID     CompanyName StatusID
--------------------------------------
1               ABC     1
2               ABC     1
3               ABC     2
4               ABC     4
5               XYZ     1
6               XYZ     1
Run Code Online (Sandbox Code Playgroud)

预期结果:

CompanyName TotalOpenClaims TotalClosedClaims TotalReOpenedClaims TotalPendingClaims
--------------------------------------------------------------------------------
ABC                 2           1                      0               1
XYZ                 2           0                      0               0
Run Code Online (Sandbox Code Playgroud)

我需要如何编写查询才能按预期获得结果?

sql-server pivot

16
推荐指数
2
解决办法
8万
查看次数

即使已声明,在 SQL 函数中出现错误“必须声明标量变量”

我正在改变function

ALTER FUNCTION [dbo].[fn_CalculateListing](@Listing TypeListingDatePrice READONLY)
RETURNS TypePreviousListingResult 
AS 
BEGIN
    DECLARE @tbl_ListingDateDetails TypePreviousListingResult   
    RETURN @tbl_ListingDateDetails
END
GO
Run Code Online (Sandbox Code Playgroud)

但抛出错误为:

Msg 137, Level 16, State 1, Procedure fn_CalculateListing, Line 6
Must declare the scalar variable "@tbl_ListingDateDetails".
Run Code Online (Sandbox Code Playgroud)

即使我在使用该变量之前已经声明过,为什么会出现错误并要求声明?

TypePreviousListingResult 是创建为 的表类型CREATE TYPE TypePreviousListingResult AS TABLE...

上一个问题:如何在sql中编写接受表作为输入并将结果作为表返回的函数?

sql-server sql-server-2012 functions user-defined-table-type table-valued-parameters

5
推荐指数
1
解决办法
8513
查看次数

如何将列传递给 sql 中的函数?

我计算中位数为:

DECLARE @TEMP TABLE
(
    ID INT
)

Select 
(
        (
            Select Top 1 ID
            From   
            (
                Select  Top 50 Percent ID
                From    @Temp
                Where   ID Is NOT NULL
                Order By ID
            ) As A
            Order By ID DESC
        ) + 
        (
            Select Top 1 ID
            From   
            (
                Select  Top 50 Percent ID
                From    @Temp
                Where   ID Is NOT NULL
                Order By ID DESC
            ) As A
            Order By ID Asc
        )
) / 2
Run Code Online (Sandbox Code Playgroud)

以上查询我想使用。但是,就我而言,columns我想计算的对象太多了MEDIAN。但我认为为每个 …

sql-server aggregate sql-server-2012

5
推荐指数
2
解决办法
3289
查看次数

在sql中将日期平均值转换为日期时转换失败

我已经从日期中取平均日期并试图获得平均日期的结果,但它引发了如下错误: Conversion failed when converting date and/or time from character string.

sql查询执行为:

select 
CONVERT
(
    DATE,
    LEFT(
          convert(
                  varchar(10),
                  AVG(
                        convert(
                                 int, 
                                 convert(
                                           varchar(10), 
                                           OnMarkDate, 
                                           112
                                         )
                                 )
                       )
                  ),8
          )
)
from @tbl_XMLResult
Run Code Online (Sandbox Code Playgroud)

列值如下:

   '2001-10-11',
   '2001-10-03',
   '2001-09-24',
   '2000-05-31',
   '2001-10-15',
   '2008-01-01'
Run Code Online (Sandbox Code Playgroud)

数据类型为日期。

sql-server sql-server-2012 date

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

为什么SQL函数总是返回空结果集?

下面function我写了接受xml并返回table结果。

CREATE FUNCTION FunctionTest(@ID INT,@XML_Details xml)
RETURNS @RESULT TABLE
(
    Value1 INT,
    Value2 INT
)
AS
BEGIN
    DECLARE @tbl_Xml_Result Table
    (
        Value1 INT,
        Value2 INT
    )

    INSERT INTO @RESULT(Value1,Value2)
    SELECT 
        l.v.value('Value2[1]','INT'),
        l.v.value('Value1[1]','INT')
    FROM @XML_Details.nodes('/Listings/listing')l(v)
    RETURN
END
Run Code Online (Sandbox Code Playgroud)

以下是我用来运行上面的代码,function但它总是返回Empty结果。

DECLARE @tbl_Xml_Result Table
(
        Value1 INT,
        Value2 INT
)
INSERT INTO @tbl_xml_Result
values(1,2),(2,3),(3,4),(4,5),(5,6)


DECLARE @xml_Temp xml

SET @xml_Temp = (   SELECT * 
                    FROM @tbl_xml_Result
                    FOR XML PATH('Listing'),ROOT('Listings')
                )

DELETE FROM @tbl_xml_Result
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2012

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

我们如何获得两个日期时间之间的小时、分钟和秒差异?

table任务有列如下:

Task(TaskID, TaskName, CreatedDate)
Run Code Online (Sandbox Code Playgroud)

并希望根据日期时间差异执行代码块:

如果任务 CreatedDate 已过去 15 分钟 THEN

执行块#01

否则,如果任务 CreatedDate 还没有超过 15 分钟,那么

执行块#02

我测试了下面的查询,但它给出的结果为 61633440

SELECT DATEDIFF(MINUTE, CONVERT(VARCHAR(10), CreatedDate, 108), CURRENT_TIMESTAMP) AS MinuteDiff
Run Code Online (Sandbox Code Playgroud)

我们如何在 sql 中实现上述目标?

sql-server sql-server-2012 datetime date

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

无法在 SQL Server 2005 上创建表类型

我创建了一个定义如下的类型:

CREATE TYPE [dbo].[TypeListingDatePrice] AS TABLE(
    [RowID] [int] NULL,
    [ListPrice] [int] NULL,
    [SoldPrice] [int] NULL,
    [PendStatusDOM] [int] NULL,
    [ListingDate] [int] NULL,
    [StatusDate] [int] NULL,
    [PendDate] [int] NULL,
    [SaleDate] [int] NULL
)
Run Code Online (Sandbox Code Playgroud)

这在 SQL Server 2012 上工作正常,但我无法在 SQL Server 2005 上做同样的事情。它在执行时出错:

消息 156,级别 15,状态 1,第 1 行
关键字“AS”附近的语法不正确。

sql-server-2005 sql-server

-4
推荐指数
1
解决办法
748
查看次数