小编Zoh*_*led的帖子

没有 WHILE 循环的查询

我们有如下所示的预约表。每个约会都需要归类为“新”或“后续”。在(该患者的)首次预约后 30 天内的任何预约(对患者)都是随访。30 天后,约会再次“新”。30 天内的任何约会都将成为“后续”。

我目前正在通过输入 while 循环来做到这一点。
如何在没有 WHILE 循环的情况下实现这一目标?

在此处输入图片说明

桌子

CREATE TABLE #Appt1 (ApptID INT, PatientID INT, ApptDate DATE)
INSERT INTO #Appt1
SELECT  1,101,'2020-01-05' UNION
SELECT  2,505,'2020-01-06' UNION
SELECT  3,505,'2020-01-10' UNION
SELECT  4,505,'2020-01-20' UNION
SELECT  5,101,'2020-01-25' UNION
SELECT  6,101,'2020-02-12'  UNION
SELECT  7,101,'2020-02-20'  UNION
SELECT  8,101,'2020-03-30'  UNION
SELECT  9,303,'2020-01-28' UNION
SELECT  10,303,'2020-02-02' 
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2016

19
推荐指数
2
解决办法
660
查看次数

链接服务器和同义词之间的区别?

t-sql链接服务器和同义词之间有区别吗?如果是这样,他们会是什么,在哪种情况下我会选择一个而不是另一个?

sql-server

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

使用mssql在'LIMIT'附近的语法不正确

我正在尝试从数据库中检索一些数据,这些数据需要是得分最高的代理商的前十名.

我的查询:

SELECT AgentScores.agentID, 
       AgentScores.totalScore, 
       Agents.firstname, 
       Agents.lastname 
FROM AgentScores 
INNER JOIN Agents ON AgentScores.AgentId=Agents.Agent_id 
ORDER BY AgentScores.totalScore DESC 
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

内连接正在工作.我找到了SELECT TOP 10sql语句,但是......我想要10个代理人得分最高而不是前10个id.正如你所看到的,我正在订购总计.

任何人都有一个线索如何解决这个问题?

错误: Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'LIMIT'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'LIMIT'. ) )

谢谢!

php sql-server

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

LINQ方法链可以被称为LINQ吗?

调用此代码片段LINQ(语言集成查询)是否正确?

var lstMyStrings = new List<string>();
lstMyStrings.Where(aX => string.IsNullOrEmpty(aX))
            .Skip(3)
            .ToList();
Run Code Online (Sandbox Code Playgroud)

我很困惑因为这段代码System.Linq是强制性的.
但是,当我看到问题和答案是这样的:.NET LINQ查询语法与方法链 ,然后他们明确谈论方法链而不是LINQ.

c# linq

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

MS SQL 2012:如果列包含0,则在SQL Shift列中显示左侧

如果第一列(左侧列)具有0值并且应该在右侧列中添加NULL,则需要将数据(列)移位到左侧.一旦在任何列中找到非零值,则后一列中的0值应保持原样.

输入数据:-

cust_id month1  month2  month3  month4  month5
c1      100     200     300     400     500
c2      0       0       50      250     350
c3      0       0       100     0       0
c4      100     0       100     0       500
c5      0       0       0       0       0
Run Code Online (Sandbox Code Playgroud)

预期产出结果: -

cust_id month1  month2  month3  month4  month5
c1      100     200     300     400     500
c2      50      250     350     NULL    NULL
c3      100     0       0       NULL    NULL
c4      100     0       100     0       500
c5      NULL    NULL    NULL    NULL    NULL
Run Code Online (Sandbox Code Playgroud)

一个静态的解决方法可能是:

IF month1=0 and …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

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

在内存中创建一个"目录"?

我正在使用c#,并且正在寻找一种方法来创建一个目录的路径,该目录将映射到IO.Stream而不是实际的文件系统.
我希望能够将文件"保存"到该路径,操作内容或文件名,然后将它们从该路径保存到文件系统中的常规文件.

我知道我可以使用临时文件,但我宁愿使用内存来保证安全性和性能.

根据这个答案Java,使用这个FileSystemProvider类,存在这种事情.我正在寻找一种方法在c#中做到这一点.

我已经尝试了我能想到的每一个搜索,并且只出现了java回答和使用临时文件的建议.
甚至可以使用.net?

基本上,我正在寻找一种方法来启用将文件直接保存到内存,就好像它们保存到文件系统中一样.所以,例如,如果我有第三方类暴露了一个save方法(save(string fullPath)),或类似于SmtpServer.Send(MyMsg) 这个问题的东西,我可以选择该路径并将其保存到内存流而不是驱动器上.(这里的主要是我想提供一个path直接导致a memory stream).

.net c# temporary-files

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

保证随机插入

我试图预生成一些字母数字字符串并将结果插入表中.字符串的长度为5.示例:a5r67.基本上我想为客户生成一些可读字符串,以便他们可以访问他们的订单 www.example.com/order/a5r67.现在我有一个select语句:

;WITH 
    cte1 AS(SELECT * FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')) AS v(t)),
    cte2 AS(SELECT * FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')) AS v(t)),
    cte3 AS(SELECT * FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')) AS v(t)),
    cte4 AS(SELECT * FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')) AS v(t)),
    cte5 AS(SELECT * FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')) AS v(t))
INSERT INTO ProductHandles(ID, Used)
SELECT cte1.t + cte2.t + cte3.t + cte4.t + cte5.t, 0
FROM cte1
CROSS JOIN cte2
CROSS JOIN cte3
CROSS JOIN cte4
CROSS JOIN cte5
Run Code Online (Sandbox Code Playgroud)

现在的问题是我需要写这样的东西来从表中获取一个值:

SELECT TOP 1 ID 
FROM ProductHandles
WHERE Used = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

将“nvarchar”列数据类型转换为“DateTime”

有谁知道如何在 SQL Server中将列数据类型从“ nvarchar”格式转换为“ datetime”?

前任:

  1. 01-06-2020 12:00:00 AM
  2. 6-17-2020 12:00:00 AM

我试过下面的查询:

ALTER TABLE MyTable ALTER COLUMN UpdatedDate datetime

但是,得到以下错误

nvarchar 数据类型到日期时间数据类型的转换导致值超出范围。

sql sql-server

6
推荐指数
2
解决办法
787
查看次数

使用SQL查询打印素数

我是StackOverflow的新手,并且为打印从2到1000的质数而陷入困境。如果这是最有效的编码方式,则使用以下查询需要输入。

WITH NUM AS (
    SELECT LEVEL N 
    FROM DUAL CONNECT BY LEVEL <= 1000
) 
SELECT LISTAGG(B.N,'-') WITHIN GROUP(ORDER BY B.N) AS PRIMES 
FROM (
    SELECT  N,
            CASE WHEN EXISTS (
                                SELECT NULL 
                                FROM NUM N_INNER 
                                WHERE N_INNER .N > 1 
                                AND N_INNER.N < NUM.N 
                                AND MOD(NUM.N, N_INNER.N)=0
                            ) THEN 
                'NO PRIME' 
            ELSE 
                'PRIME' 
            END IS_PRIME 
        FROM NUM
    ) B 
WHERE B.IS_PRIME='PRIME' 
AND B.N!=1;
Run Code Online (Sandbox Code Playgroud)

我知道这个问题已经被问过多次了,如果有的话,我正在寻求更好的解决方案。需要更多有关如何将其与MySQL / MS SQL / PostgreSQL一起使用的信息。

任何帮助都会使我的理解更好。

mysql sql-server postgresql select subquery

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

将不同的枚举映射到一起

首先,这就是为什么这个问题不重复的原因:

我知道关于将一个转换enum为另一个的多个问题已经被问到了,我甚自己回答了其中一个问题,但是我在这个主题上发现的所有问题都有一些方法来比较不同的枚举值(无论是名字还是值).在我的特定情况下,我不知道值,并且名称不匹配.

作为我正在研究的GitHub项目的一部分,名为ADONETHelper,旨在最大限度地减少与Ado.Net一起使用时的代码重复,我面对需要在不相关的枚举之间转换值.这是为了允许相同的代码与OleDb,Odbc和SqlClient一起使用(并且希望将来也可以使用OracleClient和MySqlClient).

我要做的是创建不同枚举的统一 - 特别是 - 描述sql参数数据类型的枚举.Currntly,我支持4个枚举- ,
System.Data.DbType,,
System.Data.SqlClient.SqlDbType
System.Data.OleDb.OleDbType
System.Data.Odbc.OdbcType

但如果我想添加对OracleClient或MySqlClient的支持,我将不得不努力添加System.Data.OracleClient.OracleTypeMySql.Data.MySqlClient.MySqlDbType.所以我想找到一个更优雅的方式,然后我想出了.

这是我目前的代码(它很棒,但正如我写的那样,很难添加对新枚举的支持):

首先,我已经定义了自己的枚举ADONETType.它具有条目,如Boolean,Byte,Binary,Char等".然后我创建了一个静态类,调用它DBTypeConverter来为这个枚举提供扩展方法,以便它的值可以转换为其他枚举.这就是这个类的样子:

internal static class DBTypeConverter
{
    #region private members

    private static List<DbTypeMap> _Map;

    #endregion private members

    #region static constructor

    static DBTypeConverter()
    {
        _Map = new List<DbTypeMap>()
        {
            new DbTypeMap(ADONETType.Boolean, DbType.Boolean, SqlDbType.Bit, OleDbType.Boolean, OdbcType.Bit),
            new DbTypeMap(ADONETType.Byte, DbType.Byte, SqlDbType.TinyInt, OleDbType.UnsignedTinyInt , OdbcType.TinyInt), …
Run Code Online (Sandbox Code Playgroud)

.net c# enums

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