小编Ric*_*iwi的帖子

加入三桌然后分组

我将连接三个表,然后将其中一个列与另一个列的值相乘。

SELECT t1.column, t2.column, SUM(t1.column * t2.column)
FROM table1 t1 
     INNER JOIN table2 t2 
         ON t1.id = t2.id 
     JOIN table3 t3 
         ON t2.id = t3.id 
GROUP BY t1.column, t2.column;
Run Code Online (Sandbox Code Playgroud)

这个查询符合我的要求,但我不明白为什么会这样GROUP BY

如果我将列添加到选择中,我是否还必须将列添加到组中?

sql database join group-by

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

Sql Server XML 标签操作

我有一个类似这样的XML。

<person>
    <dwelling>
        <street>S</street>
        <city>C</city>
    </dwelling>
    <ssn>123-232-232</ssn>
</person>
Run Code Online (Sandbox Code Playgroud)

我需要转换所有节点名称,假设将所有标签名称大写。在 SQL Server T-SQL 中实现此目的最快的方法是什么?

可不可能是...

  1. 字符串被 < 分割
  2. 然后在每个标记上用 > 分割(分为 LeftPart 和 RightPart)
  3. concat "<" 函数(LeftPart) + ">" + RightPart
  4. 合并(步骤 3)中的项目

如果你有更漂亮的东西,我会全神贯注。

xml sql-server string

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

MySQL - 将来自同一个表的多个选择组合成一个带有group by的结果表

我有一个仪表读数表,其中包含一个米,没有读数值和读数日期.

我想显示每年每年读数的总和.

例如:

SELECT meterNo, SUM(readingValue) '2009' FROM readings
WHERE readingDate >= '2009-01-01' AND readingDate <= '2009-12-31'
GROUP BY meterNo;
Run Code Online (Sandbox Code Playgroud)

将显示表格:

   meterNo  2009
   --------------
     4       50
     5       5
     12      30
     13      63
     18      18
     26      484
     27      21
     28      510
     29      28
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,它显示了2009年每个仪表的总读数值.但是,我需要结果表来显示每年的一列.所以它会是这样的:

   meterNo  2009  2010  2011  2012
   --------------------------------
     1             20    35     50
     2                   45     35
     3                   50     60
     4       50    35    20     30
     5       5     10    10     15
     6                          30
Run Code Online (Sandbox Code Playgroud)

等等...

我可以重用查询的where部分:

WHERE readingDate >= '2009-01-01' AND readingDate <= …
Run Code Online (Sandbox Code Playgroud)

mysql sql database pivot

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

MySQL中用于构造多个JOIN的正确语法是什么

我是SQL的新手,并尝试一起构建6个表的连接.这是我的示例代码:

SELECT cr.COMMUNICATIONS_ID, cr.CONSUMER_ID, cr.ACTION_LOG_ID, nc.CONSUMER_ID, cal.CONSUMER_ID, cal.TIPS_AMOUNT, cal.LAST_MOD_TIME, cirm.CONSUMER_RATING, ces.EXPERT_SCORE, cim.CONSUMER_INTEREST_EXPERT_ID, scs.SIMILARITY
FROM COMMUNICATION_RELVANCE AS cr
JOIN network_communications AS nc
ON cr.COMMUNICATIONS_ID=nc.COMMUNICATIONS_ID
JOIN consumer_action_log AS cal
ON cr.ACTION_LOG_ID=cal.ACTION_LOG_ID
JOIN communication_interest_mapping AS cim
ON cr.COMMUNICATIONS_ID=cim.COMMUNICATIONS_ID
JOIN consumer_interest_rating_mapping AS cirm
ON cr.CONSUMER_ID=cirm.CONSUMER_ID
    AND cim.CONSUMER_INTEREST_EXPERT_ID=cirm.CONSUMER_INTEREST_ID
JOIN consumer_expert_score AS ces
ON nc.CONSUMER_ID=ces.CONSUMER_ID
    AND cim.CONSUMER_INTEREST_EXPERT_ID=CONSUMER_EXPERT_ID
JOIN survey_customer_similarity AS scs
ON nc.CONSUMER_ID=scs.CONSUMER_ID
    AND cal.CONSUMER_ID=scs.CONSUMER_ID;
Run Code Online (Sandbox Code Playgroud)

在开始调试之前,我想确保我的代码中没有任何批发问题我的语法.

mysql sql join

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

如何根据数据库中的值显示选中的复选框?

我是PHP的新手,你能帮我解决我的问题吗?我正在尝试根据数据库中的值显示复选框.如果选中它,我将其值保存为1,如果不是,则保存为0.

html php checkbox

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

基于数组字段中的整数选择记录

我有一个房子数据库.在房屋内,mssql数据库记录是一个名为areaID的字段.房子可以在多个区域,因此数据库中的条目可以如下:

+---------+----------------------+-----------+-------------+-------+
| HouseID | AreaID               | HouseType | Description | Title |
+---------+----------------------+-----------+-------------+-------+
| 21      | 17, 32, 53           | B         | data        | data  |
+---------+----------------------+-----------+-------------+-------+
| 23      | 23, 73               | B         | data        | data  |
+---------+----------------------+-----------+-------------+-------+
| 24      | 53, 12, 153, 72, 153 | B         | data        | data  |
+---------+----------------------+-----------+-------------+-------+
| 23      | 23, 53               | B         | data        | data  |
+---------+----------------------+-----------+-------------+-------+
Run Code Online (Sandbox Code Playgroud)

如果我打开一个仅在区域53中呼叫房屋的页面,我将如何搜索它.我知道在MySQL中你可以使用find_in_SET但我使用的是Microsoft SQL Server 2005.

sql t-sql sql-server sql-server-2005

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

是否可以路由Perl的打印方法

看看 Perl方法调用是否可以拦截?

它显示了如何为一个简单的sub重写符号表.打印命令可以采用我认为的列表,那么拦截/重写它的正确方法是什么?我希望得到一个程序来延迟打印,同时保持相同的签名,而是将输出推送到一个数组中,对其进行预排序,然后在最后重新输出所有输出.

perl intercept

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

SQL:将一行转换为一列(并在新列中包含列名)

我正忙着编写一个声明提供程序类,用于安全令牌服务.

从SQL Server 2008 R2数据库读取用户权限:

SELECT A, B, C, ..., X FROM Permissions WHERE UserId = @UserId
Run Code Online (Sandbox Code Playgroud)

会给我一行,例如:

A B C ... X
1 0 1     1
Run Code Online (Sandbox Code Playgroud)

在表单中包含这些数据要容易得多

Permission Value
A          1
B          0
C          1
...
X          1
Run Code Online (Sandbox Code Playgroud)

由于实际表包含几十列,我宁愿能够"动态"进行转置,而无需手动输入任何列名.

感觉像PIVOT/UNPIVOT函数和INFORMATION_SCHEMA.COLUMNS视图是我需要的,但我不知道该怎么做.

查询的任何想法会这样做?

PS.我想如果push推进,我只是将结果集粘贴在DataTable中并迭代代码中的列以生成用户声明,但我想知道上述方法是否可行首先:)

sql sql-server unpivot sql-server-2008-r2

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

SQL与不明确的列连接

我正在尝试连接几个表来生成具有先决条件的类列表.一切都很好,除了我需要两个类的名字前提条件和原始类.

到目前为止我有

SELECT course_name, c.course_number, course_name, prereq
FROM rearp.course c, rearp.prereq p
WHERE c.course_number = p.course_number;
Run Code Online (Sandbox Code Playgroud)

这给了我(你已经可以看到一个问题,course_name在那里两次[不知道如何处理它否则])

  • 课程名称(好的)
  • 班级(是的)
  • 课程名称再次(等同名称!)
  • 前提条件(好)

忽略格式只是注意课程名称或先决条件仅对应于原始课程而不是先决条件.

我的问题是我不能得到匹配的名字.

sql oracle

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

SQLite iPhone获取最后一个插入ID

[在SQLite中插入记录后]我想获得最后一个插入ID但我不能,我该怎么办?

sqlite iphone

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

SQL连接两个表

我有2个表员工(id和名称)和薪水(id,薪水),第1行有4行,第2行有2行.

table 1            Table 2
id   Name         id    salary
1     Sue          1    10000 
2    Sarah         3     9000
3    Nick 
4    james 
Run Code Online (Sandbox Code Playgroud)

我想要一个如下连接

id   Name     Salary
1     Sue     10000
2    Sarah    No Salary
3    Nick     9000
4    james    No salary
Run Code Online (Sandbox Code Playgroud)

sql t-sql join auto-populating

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

保证表值函数结果的顺序

PREMISE:无法更改应用程序代码.条件非常具体.我正在寻找书籍上的东西,如果可能的话,最后的解决方法.

我有一个表值函数(内联),产生2到7条记录.有时它可能只有1或高达15(但很少).

该函数仅以这种方式由应用程序使用,没有任何ORDER BY.

select * from dbo.myfunction(...)
Run Code Online (Sandbox Code Playgroud)

根据您的经验,是否有任何方法可以确保(就您使用特定技术所观察到的那样)第二列按顺序返回结果?列是:varchar(3),datetime,varchar(50).不要让我开始选择*,它是INTENTIONAL,因此前端将显示许多列,我将来会显示该功能.

根据经验,使用单个索引(聚类PK)来遍历数据,任何当前版本的SQL Server和SP级别应始终在<20条记录上执行简单的INDEX SCAN而不进行并行操作,从而在应用程序选择中为我提供有序结果.

你的意见?我更愿意将理论排除在讨论之外.如果你能坚持实践经验并在家里继续讲述最佳实践,我也会很感激.


更新 这就是它现在的样子

create function dbo.myfunction(....)
returns @RES table
    (
    [#] int identity primary key clustered,
    [Varchar3Col] varchar(3),
    [DateTimeCol] datetime,
    [Varchar50Col] varchar(50)
    ) as
BEGIN
declare @RES2 table
    (
    rn int,
    [Varchar3Col] varchar(3),
    [DateTimeCol] datetime,
    [Varchar50Col] varchar(50)
    )

insert @RES2
select rn=row_number() over (order by action_time),
    [Varchar3Col]
    [DateTimeCol]
    [Varchar50Col]
from (.....)
inner join (.....) ON (.....)

declare @i int
set @i …
Run Code Online (Sandbox Code Playgroud)

sql sql-server function user-defined-functions

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

删除经理位置为美国的员工

如何删除其经理在纽约的emp?

员工表

empid       name           salary          location
101          john          10000           newyork
102          pavan         25000           newyork
103          laxman        10000           ahmedabad
104          ram           15000           usa
105          arjun         30000           washington
106          gopal         12000           washington
Run Code Online (Sandbox Code Playgroud)

表部门栏目

empid       dept    managerid
101         a        102
102         a
103         a         102
104         b         105
105         b         
106         b         105
Run Code Online (Sandbox Code Playgroud)

sql

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