小编And*_*y M的帖子

比较两列并用空值替换重复项

我有一张这样的表:

id  | t1 | t2
---------------
 1  |  a |  b
 2  |  c |  a
 3  |  a |  e
 4  |  f |  g
 5  |  c |  c
Run Code Online (Sandbox Code Playgroud)

我想比较列t1t2相互比较以删除匹配值并在每列中获取唯一值,如下所示:

   t1 | t2
  -----------
    a |  b
    c |  null
 null |  e 
    f |  g
  null| null
Run Code Online (Sandbox Code Playgroud)

选择哪一行显示值以及其他哪一行显示空值并不重要。例如,由于a在原始数据集的第 3 行中也找到了值,因此以下输出也将有效:

   t1 | t2
  -----------
 null |  b
    c |  null
    a |  e 
    f |  g
  null| null
Run Code Online (Sandbox Code Playgroud)

最终目标是在两列中显示所有不同的值并且没有相同的值。

mysql mysql-5.6

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

计算数字总和

我有一列包含数字:

Value
-----
123
452
021
111
...
Run Code Online (Sandbox Code Playgroud)

我想得到每个值的数字之和。

答案应该看起来像

Value  SumValue
-----  --------
123    6
452    11
021    3
111    3
...    ...  
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我试过这个:

select value
     , case
           when len(value) = 2 then convert(int, left(value, 1))
                                  + convert(int, right(value, 1))
           when len(value) = 3 then convert(int, substring(convert(varchar(1), value), 1,1))
                                  + convert(int, substring(convert(varchar(1), value), 2,1))
                                  + convert(int, substring(convert(varchar(1), value), 3,1))
           else value
       end as SumNum
from get_number (000, 999);
Run Code Online (Sandbox Code Playgroud)

当我达到三位数时,它无法正确计算,在我看来必须有更好的解决方案。

sql-server t-sql

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

字符串末尾的空格

我有一个如下所示的 SQL 代码:

declare @str nvarchar(max),@i int
set @i=0
set @str='abc '
declare @tbl Table(a  nvarchar(max)) 
insert @tbl select @str
while (select a from @tbl)<>''
begin 
    set @i=@i+1
    set @str = substring(@str,2,len(@str))
    update  @tbl set a=@str
select * from @tbl
end
Run Code Online (Sandbox Code Playgroud)

这里@str有值'abc '(末尾有空格)。执行上述查询时,当'a'. 此查询的输出还包括:

bc
c
<here blank>
Run Code Online (Sandbox Code Playgroud)

对于上面的查询,如果我给出输入@str'abcd' 那么输出将是

bcd
cd
d
<here blank>
Run Code Online (Sandbox Code Playgroud)

所以在第一种情况下,@str='abc '我想得到像

bc
c
<here blank>
<here blank>
Run Code Online (Sandbox Code Playgroud)

现在代码正在检查空间,因此我遇到了问题。但我希望它也考虑到最后的空间。

同样是 SQL 中的问题len()。双方 …

sql-server

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

如何将视图转为连接,以便将多个查询行作为单行中的列?

我有一个视图,我在其中提取车辆的属性,例如轮胎尺寸、发动机容量、颜色、门数等。这些数据存储在多个表中,但我已将数据简化到我的视图中。

我想要实现的是将此视图加入我的主车辆表,以便我可以选择各种属性作为单行中的列。

我的看法:

Vehicle_ID  Property     Value
1           Doors        2
1           Engine Size  2 liter
1           Tire Size    50cm
1           Color        Blue
2           Doors        4
2           Engine Size  3 liter
Run Code Online (Sandbox Code Playgroud)

还有我的主要车辆表:

Vehicle_ID  Description  Date_Bought  Owner_ID
1           BMW M3 Sport 2000/12/23   1
2           Audi A5 3XL  2015/03/19   1
Run Code Online (Sandbox Code Playgroud)

所以我想出去的是

Vehicle ID  Description   Date_Bought   Doors   [Engine Size]  [Tire Size]  [Color]
1           BMW M3 Sport  2000/12/23    2       2 liter        50cm         Blue
Run Code Online (Sandbox Code Playgroud)

我的整体 SQL 知识相当有限,我很擅长 JOINS 和其他东西,但是 PIVOT 命令的逻辑及其语法完全让我望而却步。

join sql-server pivot

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

邮政编码范围查找

(我使用 sql server 2015)在我的订单表中,邮政编码是varchar.

我想做这样的搜索:

SELECT distinct email
  FROM [dbo].[tb_Order] 
  where postalCode in (20004,20528,20260,20529,22060,22181,20708)
Run Code Online (Sandbox Code Playgroud)

(有更多邮政编码)

我不想将代码列表转换为("20004","20528","20708").

处理这个问题的最佳方法是什么?

sql-server

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

MySQL 使用 CTE 创建视图

我已经成功地在 SQL Server 中创建了一个 VIEW,如下所示。但是当我在 MySql 中尝试相同时,错误来了。

SQL 服务器命令:

CREATE VIEW [dbo].[vw_PurchParent] as

WITH cte AS 
 (
  SELECT a._Id, a._parentId, a._name, a._IsLedger
  FROM tbl_ChartOfAcc a
  WHERE _Id = 1
  UNION ALL
  SELECT a._Id, a._parentid, a._Name, a._IsLedger
  FROM tbl_ChartOfAcc a JOIN cte c ON a._parentId = c._id
  )
  SELECT *
  FROM cte where _IsLedger = 'Y'
GO
Run Code Online (Sandbox Code Playgroud)

MySQL 中的错误:

1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 'cte AS( SELECT a._Id, a._parentId, a._name, ' 附近使用的正确语法

服务器版本:5.6.41 -84.1 - Percona …

mysql cte view mysql-5.6

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

查找结果中缺少哪个日期

这是我的ticks(时钟)表:

_id_
#employee_id  
created_at
Run Code Online (Sandbox Code Playgroud)

该表为每个员工存储他们勾选的时间戳。有时他们中的一些人一天打好几次,有些人不上班时只打一次或根本不打。

我有一个查询,可以让我确切地知道员工在过去 7 天内不上班的次数,但我希望结果中包含他们上班的天数。这意味着,每个员工在过去 7 天内工作少于 6 天,以及缺少哪些日期。我不知道。

以下是我如何查询过去 7 天内谁缺席了不止一次,以及缺席了多少次:

SELECT `id`, `employee_id`, COUNT(`date`)-6 missing
FROM (
    SELECT `id`, `employee_id`, DATE(created_at) date
    FROM `ticks`
    WHERE `created_at` >= '2017-09-16' AND `created_at` < '2017-09-23'
    GROUP BY `employee_id`, `date`
) ticks
GROUP BY `employee_id`
HAVING missing < 0
Run Code Online (Sandbox Code Playgroud)

基于那个或另一个查询,我想知道该范围内缺少哪个日期(顺便说一下,我可以从另一个查询中获取范围,每天至少有 1 个刻度,即使是在星期日)。

这是一个带有示例数据集的sqlfiddle。我期待的结果是:

+-------------+--------------+
| employee_id | date_missing |
+-------------+--------------+
|           2 |   2017-09-18 |
|           2 |   2017-09-19 |
|           3 | …
Run Code Online (Sandbox Code Playgroud)

mysql date

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

LIKE 条件的隐式排序是什么?

我想知道LIKE运算符是如何分类的,我有一个查询,其中有许多链式LIKE语句。以下结果在返回时如何优先排序?

AND (
  ic.COLUMN_NAME like '%Address%'
  OR ic.COLUMN_NAME like '%Email%' 
  OR ic.COLUMN_NAME like '%Phone%' 
  OR ic.COLUMN_NAME like '%Bank%'
  OR ic.COLUMN_NAME like '%Number%'
  OR ic.COLUMN_NAME like '%NAME%'   
  OR ic.COLUMN_NAME like '%Postcode%'   
Run Code Online (Sandbox Code Playgroud)

只是为了补充说明,因为我认为有些人可能没有完全理解我的问题,我将举一个例子:

假设我正在寻找地址(而不是电子邮件)并且我使用以下语句:

select * from INFORMATION_SCHEMA.COLUMNS IC
    where ic.COLUMN_NAME like '%Address%' 
Run Code Online (Sandbox Code Playgroud)

这是我要回来的:

在此处输入图片说明

我用下面的代码做同样的事情:

select * from INFORMATION_SCHEMA.COLUMNS IC
    where ic.COLUMN_NAME like '%Email%' 
    --OR ic.COLUMN_NAME like '%Email%'
Run Code Online (Sandbox Code Playgroud)

然后我得到这个:

在此处输入图片说明

这意味着在第一种情况下,我将取回地址和电子邮件地址。我知道它们只是字符串,但是我如何才能搜索地址而不取回电子邮件地址,例如email_address1address_email1web_Address_email等。我不想使用 ,where Column_Name = 'Address'因为这意味着我会错过不同的名称,例如地址 1地址 2

sql-server like

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

查询的错误输出

使用以下查询时,我无法从 bnrcno 列中获取数据。

select 'insert into table values('||id||','||bnrcno||','||chargetype||','||domno||','||coa_id||','||liability_gl||','||revenue_gl||','||taxno||')' 
from bill_charges_map where  domno=5
Run Code Online (Sandbox Code Playgroud)

brcno列是整数类型,其中的大多数值都为空。

postgresql insert dynamic-sql

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

标签 统计

sql-server ×5

mysql ×3

mysql-5.6 ×2

cte ×1

date ×1

dynamic-sql ×1

insert ×1

join ×1

like ×1

pivot ×1

postgresql ×1

t-sql ×1

view ×1