How to combine query results?Select columns from result set of stored procedureInsert results of a stored procedure into a temporary tableHow to pass “Null” (a real surname!) to a SOAP web service in ActionScript 3?ColdFusion CFchart and feedback formColdfusion query weird charactersColdFusion <cfselect> binding ErrorSQL query multiple tables, with multiple joins and column field with comma separated listHow to return multiple results from a stored procedure in a CFC?CFMail sending to first recipient of query result onlyHow to combine/merger two separate queries into one?
Why Shazam when there is already Superman?
Is it improper etiquette to ask your opponent what his/her rating is before the game?
Closed-form expression for certain product
Has any country ever had 2 former presidents in jail simultaneously?
How could a planet have erratic days?
Store Credit Card Information in Password Manager?
What does "Scientists rise up against statistical significance" mean? (Comment in Nature)
Does the Location of Line-Dash-Wedge Notations Matter?
What was the exact wording from Ivanhoe of this advice on how to free yourself from slavery?
Yosemite Fire Rings - What to Expect?
Why is it that I can sometimes guess the next note?
Is the U.S. Code copyrighted by the Government?
Fear of getting stuck on one programming language / technology that is not used in my country
What if a revenant (monster) gains fire resistance?
How should I respond when I lied about my education and the company finds out through background check?
Are the IPv6 address space and IPv4 address space completely disjoint?
L1 and Ln cache: when are they written?
What is Cash Advance APR?
Did arcade monitors have same pixel aspect ratio as TV sets?
Loading commands from file
Not using 's' for he/she/it
How to indicate a cut out for a product window
Electoral considerations aside, what are potential benefits, for the US, of policy changes proposed by the tweet recognizing Golan annexation?
Biological Blimps: Propulsion
How to combine query results?
Select columns from result set of stored procedureInsert results of a stored procedure into a temporary tableHow to pass “Null” (a real surname!) to a SOAP web service in ActionScript 3?ColdFusion CFchart and feedback formColdfusion query weird charactersColdFusion <cfselect> binding ErrorSQL query multiple tables, with multiple joins and column field with comma separated listHow to return multiple results from a stored procedure in a CFC?CFMail sending to first recipient of query result onlyHow to combine/merger two separate queries into one?
I have three queries that are tied together. The final output requires multiple loops over the queries. This way works just fine but seems very inefficient and too complex in my opinion. Here is what I have:
Query 1:
<cfquery name="qryTypes" datasource="#application.datasource#">
SELECT
t.type_id,
t.category_id,
c.category_name,
s.type_shortcode
FROM type t
INNER JOIN section s
ON s.type_id = t.type_id
INNER JOIN category c
ON c.category_id = t.category_id
WHERE t.rec_id = 45 -- This parameter is passed from form field.
ORDER BY s.type_name,c.category_name
</cfquery>
Query Types will produce this set of results:
4 11 SP PRES
4 12 CH PRES
4 13 MS PRES
4 14 XN PRES
Then loop over query Types and get the records from another query for each record that match:
Query 2:
<cfloop query="qryTypes">
<cfquery name="qryLocation" datasource=#application.datasource#>
SELECT l.location_id, l.spent_amount
FROM locations l
WHERE l.location_type = '#trim(category_name)#'
AND l.nofa_id = 45 -- This is form field
AND l.location_id = '#trim(category_id)##trim(type_id)#'
GROUP BY l.location_id,l.spent_amount
ORDER BY l.location_id ASC
</cfquery>
<cfset spent_total = arraySum(qryLocation['spent_amount']) />
<cfset amount_total = 0 />
<cfloop query="qryLocation">
<cfquery name="qryFunds" datasource=#application.datasource#>
SELECT sum(budget) AS budget
FROM funds f
WHERE f.location_id= '#qryLocation.location_id#'
AND nofa_id = 45
</cfquery>
<cfscript>
if(qryFunds.budgetgt 0)
amount_total = amount_total + qryFunds.budget;
</cfscript>
</cfloop>
<cfset GrandTotal = GrandTotal + spent_total />
<cfset GrandTotalad = GrandTotalad + amount_total />
</cfloop>
After the loops are completed this is result:
CATEGORY NAME SPENT TOTAL AMOUNT TOTAL
SP 970927 89613
CH 4804 8759
MS 9922 21436
XN 39398 4602
Grand Total: 1025051 124410
Is there a good way to merge this together and have only one query instead of three queries and inner loops? I was wondering if this might be a good fit for a stored procedure and then do all data manipulations in there? If anyone have suggestions please let me know.
stored-procedures coldfusion sybase coldfusion-11
add a comment |
I have three queries that are tied together. The final output requires multiple loops over the queries. This way works just fine but seems very inefficient and too complex in my opinion. Here is what I have:
Query 1:
<cfquery name="qryTypes" datasource="#application.datasource#">
SELECT
t.type_id,
t.category_id,
c.category_name,
s.type_shortcode
FROM type t
INNER JOIN section s
ON s.type_id = t.type_id
INNER JOIN category c
ON c.category_id = t.category_id
WHERE t.rec_id = 45 -- This parameter is passed from form field.
ORDER BY s.type_name,c.category_name
</cfquery>
Query Types will produce this set of results:
4 11 SP PRES
4 12 CH PRES
4 13 MS PRES
4 14 XN PRES
Then loop over query Types and get the records from another query for each record that match:
Query 2:
<cfloop query="qryTypes">
<cfquery name="qryLocation" datasource=#application.datasource#>
SELECT l.location_id, l.spent_amount
FROM locations l
WHERE l.location_type = '#trim(category_name)#'
AND l.nofa_id = 45 -- This is form field
AND l.location_id = '#trim(category_id)##trim(type_id)#'
GROUP BY l.location_id,l.spent_amount
ORDER BY l.location_id ASC
</cfquery>
<cfset spent_total = arraySum(qryLocation['spent_amount']) />
<cfset amount_total = 0 />
<cfloop query="qryLocation">
<cfquery name="qryFunds" datasource=#application.datasource#>
SELECT sum(budget) AS budget
FROM funds f
WHERE f.location_id= '#qryLocation.location_id#'
AND nofa_id = 45
</cfquery>
<cfscript>
if(qryFunds.budgetgt 0)
amount_total = amount_total + qryFunds.budget;
</cfscript>
</cfloop>
<cfset GrandTotal = GrandTotal + spent_total />
<cfset GrandTotalad = GrandTotalad + amount_total />
</cfloop>
After the loops are completed this is result:
CATEGORY NAME SPENT TOTAL AMOUNT TOTAL
SP 970927 89613
CH 4804 8759
MS 9922 21436
XN 39398 4602
Grand Total: 1025051 124410
Is there a good way to merge this together and have only one query instead of three queries and inner loops? I was wondering if this might be a good fit for a stored procedure and then do all data manipulations in there? If anyone have suggestions please let me know.
stored-procedures coldfusion sybase coldfusion-11
add a comment |
I have three queries that are tied together. The final output requires multiple loops over the queries. This way works just fine but seems very inefficient and too complex in my opinion. Here is what I have:
Query 1:
<cfquery name="qryTypes" datasource="#application.datasource#">
SELECT
t.type_id,
t.category_id,
c.category_name,
s.type_shortcode
FROM type t
INNER JOIN section s
ON s.type_id = t.type_id
INNER JOIN category c
ON c.category_id = t.category_id
WHERE t.rec_id = 45 -- This parameter is passed from form field.
ORDER BY s.type_name,c.category_name
</cfquery>
Query Types will produce this set of results:
4 11 SP PRES
4 12 CH PRES
4 13 MS PRES
4 14 XN PRES
Then loop over query Types and get the records from another query for each record that match:
Query 2:
<cfloop query="qryTypes">
<cfquery name="qryLocation" datasource=#application.datasource#>
SELECT l.location_id, l.spent_amount
FROM locations l
WHERE l.location_type = '#trim(category_name)#'
AND l.nofa_id = 45 -- This is form field
AND l.location_id = '#trim(category_id)##trim(type_id)#'
GROUP BY l.location_id,l.spent_amount
ORDER BY l.location_id ASC
</cfquery>
<cfset spent_total = arraySum(qryLocation['spent_amount']) />
<cfset amount_total = 0 />
<cfloop query="qryLocation">
<cfquery name="qryFunds" datasource=#application.datasource#>
SELECT sum(budget) AS budget
FROM funds f
WHERE f.location_id= '#qryLocation.location_id#'
AND nofa_id = 45
</cfquery>
<cfscript>
if(qryFunds.budgetgt 0)
amount_total = amount_total + qryFunds.budget;
</cfscript>
</cfloop>
<cfset GrandTotal = GrandTotal + spent_total />
<cfset GrandTotalad = GrandTotalad + amount_total />
</cfloop>
After the loops are completed this is result:
CATEGORY NAME SPENT TOTAL AMOUNT TOTAL
SP 970927 89613
CH 4804 8759
MS 9922 21436
XN 39398 4602
Grand Total: 1025051 124410
Is there a good way to merge this together and have only one query instead of three queries and inner loops? I was wondering if this might be a good fit for a stored procedure and then do all data manipulations in there? If anyone have suggestions please let me know.
stored-procedures coldfusion sybase coldfusion-11
I have three queries that are tied together. The final output requires multiple loops over the queries. This way works just fine but seems very inefficient and too complex in my opinion. Here is what I have:
Query 1:
<cfquery name="qryTypes" datasource="#application.datasource#">
SELECT
t.type_id,
t.category_id,
c.category_name,
s.type_shortcode
FROM type t
INNER JOIN section s
ON s.type_id = t.type_id
INNER JOIN category c
ON c.category_id = t.category_id
WHERE t.rec_id = 45 -- This parameter is passed from form field.
ORDER BY s.type_name,c.category_name
</cfquery>
Query Types will produce this set of results:
4 11 SP PRES
4 12 CH PRES
4 13 MS PRES
4 14 XN PRES
Then loop over query Types and get the records from another query for each record that match:
Query 2:
<cfloop query="qryTypes">
<cfquery name="qryLocation" datasource=#application.datasource#>
SELECT l.location_id, l.spent_amount
FROM locations l
WHERE l.location_type = '#trim(category_name)#'
AND l.nofa_id = 45 -- This is form field
AND l.location_id = '#trim(category_id)##trim(type_id)#'
GROUP BY l.location_id,l.spent_amount
ORDER BY l.location_id ASC
</cfquery>
<cfset spent_total = arraySum(qryLocation['spent_amount']) />
<cfset amount_total = 0 />
<cfloop query="qryLocation">
<cfquery name="qryFunds" datasource=#application.datasource#>
SELECT sum(budget) AS budget
FROM funds f
WHERE f.location_id= '#qryLocation.location_id#'
AND nofa_id = 45
</cfquery>
<cfscript>
if(qryFunds.budgetgt 0)
amount_total = amount_total + qryFunds.budget;
</cfscript>
</cfloop>
<cfset GrandTotal = GrandTotal + spent_total />
<cfset GrandTotalad = GrandTotalad + amount_total />
</cfloop>
After the loops are completed this is result:
CATEGORY NAME SPENT TOTAL AMOUNT TOTAL
SP 970927 89613
CH 4804 8759
MS 9922 21436
XN 39398 4602
Grand Total: 1025051 124410
Is there a good way to merge this together and have only one query instead of three queries and inner loops? I was wondering if this might be a good fit for a stored procedure and then do all data manipulations in there? If anyone have suggestions please let me know.
stored-procedures coldfusion sybase coldfusion-11
stored-procedures coldfusion sybase coldfusion-11
edited 2 days ago
RRK
13k41939
13k41939
asked 2 days ago
espresso_coffeeespresso_coffee
2,10752050
2,10752050
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
qryTypesreturns X recordsqryLocationreturns Y records
So far you've run (1 + X) queries.
qryFundsreturns Z records
Now you've run (1 + X)(Y) queries.
The more data each returns, the more queries you'll run. Obviously not good.
If all you want is the final totals for each category, in a stored procedure, you could create a temp table with the joined data from qryTypes and qryLocation. Then your last qryFunds is just joined against that temp table data.
SELECT
sum(budget) AS budget
FROM
funds f
INNER JOIN
#TEMP_TABLE t ON t.location_id = f.location_id
AND
nofa_id = 45
You could then get other sums off the temp table if needed. It's possible this could all be worked into a single query, but maybe this helps you get there.
Also, a stored procedure can return multiple record sets, so you can have one return the aggregated table amount data and a 2nd return the grand total. This would keep all the calculations on the database and no need for CF to be involved.
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is aGROUP BYinqryLocationwith no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.
– Shawn
yesterday
qryTypesis 1 query, which returns X records. Loop overqryLocationX times:(1 + X)queries. The real fun is thatqryLocationcan have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.
– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)
– Shawn
20 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55281248%2fhow-to-combine-query-results%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
qryTypesreturns X recordsqryLocationreturns Y records
So far you've run (1 + X) queries.
qryFundsreturns Z records
Now you've run (1 + X)(Y) queries.
The more data each returns, the more queries you'll run. Obviously not good.
If all you want is the final totals for each category, in a stored procedure, you could create a temp table with the joined data from qryTypes and qryLocation. Then your last qryFunds is just joined against that temp table data.
SELECT
sum(budget) AS budget
FROM
funds f
INNER JOIN
#TEMP_TABLE t ON t.location_id = f.location_id
AND
nofa_id = 45
You could then get other sums off the temp table if needed. It's possible this could all be worked into a single query, but maybe this helps you get there.
Also, a stored procedure can return multiple record sets, so you can have one return the aggregated table amount data and a 2nd return the grand total. This would keep all the calculations on the database and no need for CF to be involved.
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is aGROUP BYinqryLocationwith no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.
– Shawn
yesterday
qryTypesis 1 query, which returns X records. Loop overqryLocationX times:(1 + X)queries. The real fun is thatqryLocationcan have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.
– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)
– Shawn
20 hours ago
add a comment |
qryTypesreturns X recordsqryLocationreturns Y records
So far you've run (1 + X) queries.
qryFundsreturns Z records
Now you've run (1 + X)(Y) queries.
The more data each returns, the more queries you'll run. Obviously not good.
If all you want is the final totals for each category, in a stored procedure, you could create a temp table with the joined data from qryTypes and qryLocation. Then your last qryFunds is just joined against that temp table data.
SELECT
sum(budget) AS budget
FROM
funds f
INNER JOIN
#TEMP_TABLE t ON t.location_id = f.location_id
AND
nofa_id = 45
You could then get other sums off the temp table if needed. It's possible this could all be worked into a single query, but maybe this helps you get there.
Also, a stored procedure can return multiple record sets, so you can have one return the aggregated table amount data and a 2nd return the grand total. This would keep all the calculations on the database and no need for CF to be involved.
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is aGROUP BYinqryLocationwith no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.
– Shawn
yesterday
qryTypesis 1 query, which returns X records. Loop overqryLocationX times:(1 + X)queries. The real fun is thatqryLocationcan have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.
– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)
– Shawn
20 hours ago
add a comment |
qryTypesreturns X recordsqryLocationreturns Y records
So far you've run (1 + X) queries.
qryFundsreturns Z records
Now you've run (1 + X)(Y) queries.
The more data each returns, the more queries you'll run. Obviously not good.
If all you want is the final totals for each category, in a stored procedure, you could create a temp table with the joined data from qryTypes and qryLocation. Then your last qryFunds is just joined against that temp table data.
SELECT
sum(budget) AS budget
FROM
funds f
INNER JOIN
#TEMP_TABLE t ON t.location_id = f.location_id
AND
nofa_id = 45
You could then get other sums off the temp table if needed. It's possible this could all be worked into a single query, but maybe this helps you get there.
Also, a stored procedure can return multiple record sets, so you can have one return the aggregated table amount data and a 2nd return the grand total. This would keep all the calculations on the database and no need for CF to be involved.
qryTypesreturns X recordsqryLocationreturns Y records
So far you've run (1 + X) queries.
qryFundsreturns Z records
Now you've run (1 + X)(Y) queries.
The more data each returns, the more queries you'll run. Obviously not good.
If all you want is the final totals for each category, in a stored procedure, you could create a temp table with the joined data from qryTypes and qryLocation. Then your last qryFunds is just joined against that temp table data.
SELECT
sum(budget) AS budget
FROM
funds f
INNER JOIN
#TEMP_TABLE t ON t.location_id = f.location_id
AND
nofa_id = 45
You could then get other sums off the temp table if needed. It's possible this could all be worked into a single query, but maybe this helps you get there.
Also, a stored procedure can return multiple record sets, so you can have one return the aggregated table amount data and a 2nd return the grand total. This would keep all the calculations on the database and no need for CF to be involved.
answered 2 days ago
Adrian J. MorenoAdrian J. Moreno
10.3k12634
10.3k12634
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is aGROUP BYinqryLocationwith no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.
– Shawn
yesterday
qryTypesis 1 query, which returns X records. Loop overqryLocationX times:(1 + X)queries. The real fun is thatqryLocationcan have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.
– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)
– Shawn
20 hours ago
add a comment |
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is aGROUP BYinqryLocationwith no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.
– Shawn
yesterday
qryTypesis 1 query, which returns X records. Loop overqryLocationX times:(1 + X)queries. The real fun is thatqryLocationcan have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.
– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)
– Shawn
20 hours ago
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is a
GROUP BY in qryLocation with no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.– Shawn
yesterday
I think switch your X and Y..... Actually, I think it might be (X+(X*Y)) and there is a
GROUP BY in qryLocation with no aggregation being done in the query. Regardless, it's a serious beating on the database (and network and processor). This is a case of data handling being done in code when it would be much better suited to be done in the SQL itself. You are absolutely right that this bit of code can get out of hand quickly.– Shawn
yesterday
qryTypes is 1 query, which returns X records. Loop over qryLocationX times: (1 + X) queries. The real fun is that qryLocation can have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.– Adrian J. Moreno
yesterday
qryTypes is 1 query, which returns X records. Loop over qryLocationX times: (1 + X) queries. The real fun is that qryLocation can have a variable number of returned records. So really this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over.– Adrian J. Moreno
yesterday
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)– Shawn
20 hours ago
"this turns into the kind of math problem where I started having dreams of matrices of data and quit being a math major over."- :-)– Shawn
20 hours ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55281248%2fhow-to-combine-query-results%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown