我将连接三个表,然后将其中一个列与另一个列的值相乘。
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?
如果我将列添加到选择中,我是否还必须将列添加到组中?
我有一个类似这样的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 中实现此目的最快的方法是什么?
可不可能是...
如果你有更漂亮的东西,我会全神贯注。
我有一个仪表读数表,其中包含一个米,没有读数值和读数日期.
我想显示每年每年读数的总和.
例如:
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) 我是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)
在开始调试之前,我想确保我的代码中没有任何批发问题我的语法.
我是PHP的新手,你能帮我解决我的问题吗?我正在尝试根据数据库中的值显示复选框.如果选中它,我将其值保存为1,如果不是,则保存为0.
我有一个房子数据库.在房屋内,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.
它显示了如何为一个简单的sub重写符号表.打印命令可以采用我认为的列表,那么拦截/重写它的正确方法是什么?我希望得到一个程序来延迟打印,同时保持相同的签名,而是将输出推送到一个数组中,对其进行预排序,然后在最后重新输出所有输出.
我正忙着编写一个声明提供程序类,用于安全令牌服务.
从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中并迭代代码中的列以生成用户声明,但我想知道上述方法是否可行首先:)
我正在尝试连接几个表来生成具有先决条件的类列表.一切都很好,除了我需要两个类的名字前提条件和原始类.
到目前为止我有
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在那里两次[不知道如何处理它否则])
忽略格式只是注意课程名称或先决条件仅对应于原始课程而不是先决条件.
我的问题是我不能得到匹配的名字.
我有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) 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) 如何删除其经理在纽约的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)