这是SQL:
CASE
WHEN Field1 = 0 THEN 0
ELSE SUM((Field1 - Field2 * Field3)/Field1)
END
Run Code Online (Sandbox Code Playgroud)
每次Field1 = 0时,它的变化和返回除以零误差
需要转移视线,我确信答案是显而易见的.
谢谢
在从C#到SQL服务器没有任何不精确的情况下,让程序插入实际数字会遇到很多麻烦.
例如,以下是在推送到SQL Server之前如何在C#中处理数据的代码:
DataTable dt = new DataTable();
dt.Columns.Add("Number", typeof(double));
dt.Rows.Add(6.5);
dt.Rows.Add(7);
dt.Rows.Add(8);
SqlConnection con;
string sqlCmd;
SqlCommand cmd;
using (con = new SqlConnection(Common.DBLink))
{
con.Open();
SqlBulkCopy bulkCopy = new SqlBulkCopy(con);
bulkCopy.DestinationTableName = "NumberTable";
bulkCopy.WriteToServer(dt);
con.Close();
}
Run Code Online (Sandbox Code Playgroud)
但如果我有一个像2.85这样的数字,它会被插入为2.8499.SQL列是一种DECIMAL(10,4)数据类型.这只发生在很少的数字上.对于像12.5或20这样的值,它永远不会发生.
我试图使索引值在100到200的范围内,而不是按照列类型int的0到上限.
对于创建我使用的表的下限,[ID] [int] IDENTITY(100, 1) NOT NULL但是我无法弄清楚如何达到200的上限.
怎么做到这一点?
问候
我有一张包含汽车信息的表格 dbo.Car
CarID | Make | Model
23 Volvo XC90
40 Chevrolet Camaro
46 BMW Z4
Run Code Online (Sandbox Code Playgroud)
还有另一个表,dbo.CIS其中列出了其他信息.它是这样的:
CarID | Dist | U1 | U2 | U3 | U4 | U5 -- U22
23 180 65 94 80 56 88 71
23 1170 68 93 24 23 19 93
40 908 89 15 68 46 59 31
46 500 10 20 30 40 50 35
46 2300 60 62 44 52 75 99
Run Code Online (Sandbox Code Playgroud)
数据在这个表中意味着什么并不重要.但是,我想加入的CarID,只返回1行中具有的最高值Dist从列dbo.CIS …
我有一张桌子,可以存放一个人的几个标识符.在此表中,我想创建一个计算的标识符列,该列根据可用的标识符存储该记录的最佳标识符.
例如(一些虚构的样本数据)....
表="公民"
Id | LastName | DL-No | SS-No | State-Id-No | Calculated
------------------------------------------------------------------------
1 | Smith | NULL | 374-784-8888 | 7383204848 | ?
2 | Jones | JG892435262 | NULL | NULL | ?
3 | Trask | TSK73948379 | NULL | 9276542119 | ?
4 | Clinton | CL231429888 | 543-123-5555 | 1840430324 | ?
Run Code Online (Sandbox Code Playgroud)
我知道我想选择标识符的顺序......
所以我希望计算出的标识符列成为表模式的一部分.期望的结果将是......
Id | LastName | DL-No | SS-No | State-Id-No | Calculated
------------------------------------------------------------------------
1 | Smith | …Run Code Online (Sandbox Code Playgroud) 我在对数据库进行一些维护时遇到问题.我们有一个表A和一个具有一对多关系的表B. 现在,表B中的每一行都有1到10行,我希望看到除最近的5行之外的每一行.如果A中任何一行的B中有5行或更少的行,我不想看到它,因为我不关心那些数据.
这是我到目前为止的查询:
WITH cte (id, number)
AS
(
SELECT A.id, COUNT(*)
FROM A INNER JOIN B ON A.id=B.a
GROUP BY A.id
)
SELECT A.id, B.id, number
FROM cte c
INNER JOIN B ON B.a=c.id
WHERE number > 5
ORDER BY A.id, B.id DESC;
GO
Run Code Online (Sandbox Code Playgroud)
它会给我A和B中行的ID,而这个数字只是为了帮助我看看发生了什么(如果有10个匹配的行,那么它将是10,如果是9,则为9).
我真的不知道接下来要去哪里.我在A中有一个行列表,在B中有它们的匹配,我想只看到B中每行的最后5行.我的数据可能如下所示:
A | B | number
---------
1 | 7 | 7
1 | 6 | 7
1 | 5 | 7
1 | 4 | 7
1 | 3 | 7
1 | …Run Code Online (Sandbox Code Playgroud) 我有一张桌子上有一些名字:
SELECT * FROM d;
Forename
--------------------------------
Robert
Susan
Frances
Kate
May
Alex
Anna
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序提取累计名称长度.到目前为止,我有:
WITH Names ( RowNum, Forename, ForenameLength )
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY forename ) AS RowNum ,
Forename ,
LEN(forename) AS ForenameLength
FROM d
)
SELECT RowNum ,
Forename ,
ForenameLength ,
ISNULL(ForenameLength + ( SELECT ISNULL(SUM(ForenameLength),0)
FROM Names
WHERE RowNum < n.RowNum
), 0) AS CumLen
FROM NAMES n;
RowNum Forename ForenameLength CumLen
-------------------- -------------------------------- -------------- -----------
1 Alex 4 4 …Run Code Online (Sandbox Code Playgroud) sql-server common-table-expression sql-server-2008 sql-server-2012
我在下面的陈述中遗漏了什么吗?
select replace('xAxAxAx', 'xAx', 'xBx')
Run Code Online (Sandbox Code Playgroud)
因为它导致:
xBxAxBx
Run Code Online (Sandbox Code Playgroud)
这是已知的错误还是我错过了一些基本的东西?
微软称这个replace功能:
将所有出现的指定字符串值替换为另一个字符串值.
这不是第二次xAx出现吗?
我正在尝试创建一个正常的SQL查询,动态调用某个表中的列.我已经阅读了一些有关如何使用列的列表的论坛INFORMATION_SCHEMA.COLUMNS,但我想从中选择列INFORMATION_SCHEMA.COLUMNS from my table.
例如:
SELECT (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_') FROM OPOR
Run Code Online (Sandbox Code Playgroud)
但它只返回列名.不是我表中此列的值.所以我的问题是,是否可以返回值INFORMATION_SCHEMA.COLUMNS并从我的表中选择它?我的示例专栏是,U_NewColumn.所以结果应该是:SELECT U_NewColumn FROM OPOR
我有一个表,其中包含某些日期的股票及其权重列表.我想做的是在两个不同的日期选择属于投资组合的股票并比较权重.简单的例子如下,
Date 1st March 2015 Date 1st May 2015
Stock Name Weight Stock Name Weight
ABC 20 MNO 30
DEF 15 XYZ 25
MNO 40 LMN 30
LMN 25 PPP 10
KLM 5
ABC 20
Run Code Online (Sandbox Code Playgroud)
结果我想
Stock Name Weight Change
ABC 0
DEF -15
MNO -10
LMN 5
PPP 10
KLM 5
XYZ 25
Run Code Online (Sandbox Code Playgroud)
到目前为止,这就是我所需要的一切!
with t0 as
(select * from PORT_WGT
and port_name = 'My Port'
and wgt <> 0
and pricedate = '2015-01-02'),
t1 as
(select * from …Run Code Online (Sandbox Code Playgroud)