使用在SQL Server中使用Join获取此输出的问题

问题描述 投票:0回答:2

我想显示这样的输出,

+------------+--------------+---------------------+---------------+-----------+--------------+-----------+
| segment_id | segment_name | segment_description | tot_questions | tot_marks | marks_obtain | neg_marks |
+------------+--------------+---------------------+---------------+-----------+--------------+-----------+
| 10006      | MCQ SECTION  |                     | 5             | 20        |              | -.5       |
+------------+--------------+---------------------+---------------+-----------+--------------+-----------+
| 10007      | Non-MCQ      |                     | 5             | 20        |              | 0         |
+------------+--------------+---------------------+---------------+-----------+--------------+-----------+

现在这是我的表,将用于连接,

 1.MockTestMaster (Used column tot_marks)
+---------+------------+-------------+-------------+
| test_id | test_name  | total_Marks | template_id |
+---------+------------+-------------+-------------+
| 1       | MOCKTEST-X | 20          | 1           |
+---------+------------+-------------+-------------+

2. MockTestDetails(segment_id,segment_name,tot_questions)
+---------+------------+--------------+------------------------+
| test_id | section_id | section_name | total_section_question |
+---------+------------+--------------+------------------------+
| 1       | 10006      | MCQ SECTION  | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10006      | MCQ SECTION  | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10006      | MCQ SECTION  | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10006      | MCQ SECTION  | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10006      | MCQ SECTION  | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10007      | Non-MCQ      | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10007      | Non-MCQ      | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10007      | Non-MCQ      | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10007      | Non-MCQ      | 5                      |
+---------+------------+--------------+------------------------+
| 1       | 10007      | Non-MCQ      | 5                      |
+---------+------------+--------------+------------------------+

3. prd_template_question_type (used columns neg_marks)
+-------------+-------------+----------------+----------------+
| template_id | is_mcq_type | is_nonmcq_type | marks_if_wrong |
+-------------+-------------+----------------+----------------+
| 1           | 1           | 0              | -0.5           |
+-------------+-------------+----------------+----------------+
| 1           | 0           | 1              | 0              |
+-------------+-------------+----------------+----------------+
    4. prd_templatesection (I could use this table,but on my application user could add 
a section and which will not be inserted in this table because 
it will change the original template,so I inserted that section in MockTestDetails table)
+-------------+------------+--------------+------------------------+-------------------+
| template_id | section_id | section_name | total_section_question | sectiontype_isMcq |
+-------------+------------+--------------+------------------------+-------------------+
| 1           | 10006      | MCQ SECTION  | 5                      | true              |
+-------------+------------+--------------+------------------------+-------------------+
| 1           | 10007      | Non-MCQ      | 5                      | false             |
+-------------+------------+--------------+------------------------+-------------------+

现在获取输出的问题是prd_template_question_type表的marks_if_wrong列。

现在是如何获得neg_marks的方法:-如果prd_templatesectionsectiontype_isMcqtrue,则获取prd_template_question_typemarks_if_wrong

尝试查询,

SELECT DISTINCT md.section_id AS segment_id,
       md.section_name AS segment_name,
       '' AS segment_description,
       md.total_section_question as tot_questions,
       total_Marks AS tot_marks,
       '' AS marks_obtain,
       '' AS neg_marks
       --prd_template_question_type.marks_if_wrong AS neg_marks
FROM dbo.MocktestDetails md
INNER JOIN dbo.MockTestMaster mm ON mm.test_id = md.test_id 
INNER JOIN prd_templatesection pts ON pts.template_id = mm.template_id
WHERE mm.test_id = 1;

这里是fiddle of this problem

我想显示这样的输出,+ ------------ + -------------- + ---------- ----------- + --------------- + ----------- + ---------- ---- + ----------- + | segment_id | segment_name | segment_description | ...

sql sql-server join
2个回答
0
投票

好像您只是缺少一个联接:


0
投票

您可以使用以下代码

© www.soinside.com 2019 - 2024. All rights reserved.