表#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)
我需要如何编写查询才能按预期获得结果?
我正在改变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-server sql-server-2012 functions user-defined-table-type table-valued-parameters
我计算中位数为:
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。但我认为为每个 …
我已经从日期中取平均日期并试图获得平均日期的结果,但它引发了如下错误: 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)
数据类型为日期。
下面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) 该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 中实现上述目标?
我创建了一个定义如下的类型:
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”附近的语法不正确。